Accounts CSV import API

accounts_v1

low7 fields · 2 required · 1 validatedPack · CRM

Import this template via API. Import account (company-level) CRM records from CSV. URL-validated, ARR-banded, multilingual industry hints.

30-second curl

curl -X POST https://api.adaptivmapr.com/v1/uploads \
  -H "Authorization: Bearer $ADAPTIVMAPR_API_KEY" \
  -F "template=accounts_v1" \
  -F "file=@your_data.csv"

At a glance

Pack
CRM
FHIR resource
Risk level
low
Fields
7 (2 required, 1 validated)

Why this template?

The Accounts template is the company-level CRM row — the parent of contacts and opportunities. Each row carries an id, the company name, a domain (validated as a URL), an industry string, an employee_count number, a country, and an ARR band (under_100k / 100k_1m / 1m_10m / 10m_100m / over_100m). The ARR band is a banded enum rather than a raw number because most sources do not have precise ARR — they have a range from a data provider. Sales-ops teams use the Accounts template to import enriched data from Clearbit, ZoomInfo, or LinkedIn Sales Navigator; to seed a fresh CRM with a target-account list; and to refresh segmentation before a campaign. The domain validator catches missing scheme, missing TLD, and typos like "https//example.com" before they pollute downstream lookups.

employee_count is a number, not a band, because employee count is usually known precisely from public sources. ARR is a band because revenue estimates are noisy; pretending to precision invites misranking accounts. Country is a free string; ISO-3166 normalisation happens downstream.

Migration scenarios & common foreign headers

Migration scenarios for the Accounts template: ABM target-account list uploads from a freshly-defined ICP, quarterly Clearbit / ZoomInfo refreshes of the existing book, CRM platform migrations where the account hierarchy must survive intact, and post-acquisition reconciliation when two go-to-market motions need to merge into one account model. Foreign headers we see routinely: "Account / Konto / Firma / Société / Empresa / Azienda / Domain / Website / URL / Sitio Web / Branche / Industrie / Industria / Sector / Mitarbeiter / Employés / Empleados / Dipendenti / Land / Pays / País / Paese / ARR / Annual Revenue / Umsatz". The URL validator catches typos in domain columns (missing scheme, missing TLD, "www" only) before they pollute the downstream enrichment pipeline.

Schema

The canonical column set, with the type each row carries, whether it is required, the field-level validators that fire on commit, and the multilingual header hints the cascade resolves against.

ColumnTypeRequiredValidatorsHints
idstringyes
namestringyesfirma · unternehmen · société · azienda · empresa
domainstringurlwebsite · web · sitio web · url
industrystringbranche · industrie · industria · sector
employee_countnumbermitarbeiter · employés · dipendenti · empleados · staff
countrystringland · pays · paese · país
arr_bandenum

How AdaptivMapr maps your headers to this template

Five layers run in order, cheapest first. Layer 1 (Statistics) auto-accepts headers that have been mapped the same way across past uploads. Layer 2 (Heuristic) compares your header to the column name, the optional label, and every registered hint (DE / FR / IT / EN / ES) after a Unicode-and-punctuation-normalising pass. Layer 3 (Fuzzy) catches typos and reordered words. Layer 4 (Semantic) uses cached embeddings to catch the long tail of paraphrases. Layer 5 (LLM) only fires on genuinely ambiguous columns, constrained to the template’s allowed column set so it cannot invent a field. When a layer auto-accepts, the lower-cost layers below it never run — that is the cost lever.

REST · POST /v1/uploads

Pass the template_id; the cascade picks up the rest.

curl -X POST https://api.adaptivmapr.com/v1/uploads \
  -H "Authorization: Bearer $ADAPTIVMAPR_API_KEY" \
  -F "template=accounts_v1" \
  -F "file=@your_data.csv"

The canonical template definition is read-only at GET /v1/templates/accounts_v1.

MCP · Cursor / Claude Desktop

Drop AdaptivMapr into your IDE. Schema-only calls are free and unlimited.

// In Cursor or Claude Desktop with the AdaptivMapr MCP server installed:
adaptivmapr.match_headers({
  template: "accounts_v1",
  headers: ["id", "name", "domain", "industry"]
})
MCP install instructions →

FAQ — Accounts CSV import

Why is industry not an enum?

No industry taxonomy is universal. NAICS, SIC, GICS, and Clearbit's own taxonomy all disagree. The canonical row stays free-text; teams normalise downstream against the taxonomy they care about.

How do I handle parent / subsidiary relationships?

Add a `parent_account_id` via a fork. The canonical row is flat; hierarchies are CRM-specific.

What about multi-headquarter companies?

One row per legal entity. If your CRM models global parents, denormalise downstream — the canonical row stays one-company-one-row.

Can I import accounts without a domain?

Yes — domain is optional. Long-tail accounts (private companies, sole traders, regulated industries without a public web presence) often arrive without one. The URL validator only runs when a value is present.

Keep exploring

Browse other templates in the CRM pack

Accounts CSV import API — AdaptivMapr — AdaptivMapr