CRM pack
5 templates, one canonical shape each.
Sales-ops templates for leads, contacts, opportunities, accounts, and activity logs.
GET /v1/templates
{
"packs": [
{
"id": "crm",
"name": "CRM",
"template_count": 5
}
],
"templates": [
{ "id": "leads_v1", "risk": "low", "field_count": 9, "pack": "crm" },
{ "id": "contacts_v1", "risk": "low", "field_count": 9, "pack": "crm" },
{ "id": "opportunities_v1", "risk": "low", "field_count": 9, "pack": "crm" },
…
]
}The templates
Every template in this pack, printed as it ships.
Canonical column names, field counts, validator ids and risk level — read straight from the shipped template definition. Paste the header row from your own export and the deterministic layers will show you, column by column, which of these 5 it lands on.
Nothing is uploaded. The match runs in this tab against the shipped template vocabulary, using the same normaliser and fuzzy scorer the Worker runs on layers 2 and 3.
Leads
lowSales leads: contact, source, status, and creation metadata.
emailphoneid · email · first_name · last_name · company · +4
leads_v1ViewContacts
lowPeople at named accounts: identity, contact details, role, decision-maker flag.
emailphoneid · account_id · first_name · last_name · email · +4
contacts_v1ViewOpportunities
lowDeals in pipeline: amount, stage, probability, close date, owner.
number_rangeemailid · account_id · name · amount · currency · +4
opportunities_v1ViewAccounts
lowCompany-level CRM records: domain, industry, headcount, country, ARR band.
urlid · name · domain · industry · employee_count · +2
accounts_v1ViewActivities
lowLog of CRM touches and events: calls, emails, meetings, demos, notes, tasks.
id · contact_id · account_id · kind · subject · +3
activities_v1View- 5 templates
- 4 validators in this pack
- 104 header hints across 5 languages
- 42 canonical fields
Side by side
The whole pack as counted facts.
Same information the cards carry, in one scannable block — for the moment you are choosing between two templates that both look plausible. Every number is derived from the shipped definition at build time.
| Template | Fields | Required | Validated | Hints | Risk | FHIR |
|---|---|---|---|---|---|---|
Leadsleads_v1 | 9 | 2 | 2 | 33 | low | — |
Contactscontacts_v1 | 9 | 1 | 2 | 30 | low | — |
Opportunitiesopportunities_v1 | 9 | 3 | 2 | 24 | low | — |
Accountsaccounts_v1 | 7 | 2 | 1 | 22 | low | — |
Activitiesactivities_v1 | 8 | 1 | 0 | 20 | low | — |
42 canonical columns and 104 distinct header hints across the pack. "Validated" counts columns carrying at least one field-level validator; "hints" counts the distinct multilingual header names the deterministic layers resolve for free.
Validators
The checks that fire before you commit.
4 validators run on this pack. They are pure functions — the same code runs in the Worker, in the browser widget and in the MCP validate_row tool, so a dry run and a commit cannot disagree.
| Validator | What it checks | Templates in this pack |
|---|---|---|
email | RFC-style address shape. | leads_v1 · contacts_v1 · opportunities_v1 |
number_range | Numeric parse plus min/max bounds. | opportunities_v1 |
phone | libphonenumber-js in strict mode, with an optional country allowlist. | leads_v1 · contacts_v1 |
url | Scheme limited to http/https, with an SSRF guard on loopback and RFC1918 hosts. | accounts_v1 |
Empty values bypass a validator — required-ness is checked separately. LOINC / ICD-10 / ATC additionally try to resolve a free-text value to a canonical code before failing.
Review gating
Nothing in this pack needs a review gate.
A template's risk level is the only input to the flag. Medium and high templates make PATCH /uploads/:id/mappings return requires_hitl so your own workflow can hold the commit — it is a flag, not a queue. Native AgentGate HITL integration is on the roadmap for Q3 2026 and is not wired in v1.
Commits straight through. No review flag on the mappings response.
leads_v1 · contacts_v1 · opportunities_v1 · accounts_v1 · activities_v1
Flagged `requires_hitl: true` with `hitl_status: "pending_review"` so you can gate your own commit workflow.
Flagged `requires_hitl: true` with `hitl_status: "pending_review"`. Regulated identifiers — card data, IBANs, payroll, KYC.
Try it
One call maps a file onto any of them.
Name the template and POST the file. The cascade resolves what it can on the deterministic layers — statistics, heuristic, fuzzy — and only the leftovers reach the metered LLM.
curl -X POST https://api.adaptivmapr.com/v1/uploads \
-H "Authorization: Bearer $ADAPTIVMAPR_API_KEY" \
-F "template=leads_v1" \
-F "file=@your_export.csv"Schema-only mode sends column headers plus at most three sample rows, each clamped to 80 characters — a data-minimization mode enforced at the HTTP edge. Full-data mode routes the metered layer-5 call in-region under a BAA and costs 20% more, and stays locked until the workspace accepts the BAA/NDA in Settings → Security & Data.
Read the quickstart- leads_v1Leads9 fields
- contacts_v1Contacts9 fields
- opportunities_v1Opportunities9 fields
- accounts_v1Accounts7 fields
- activities_v1Activities8 fields
Ready when you are
Put the crm pack to work — without shipping raw records.
Schema-only mode leaves only headers and up to three clamped sample rows. Full-data adds row-level AI, routed in-region under a BAA.