Import entities (CSV)
API Reference
Import entities (CSV)
Upload a CSV and enqueue bulk entity import β platform format without mappingId or custom columns with mappingId. Manual by default; automatic when explicit.
POST
Import entities (CSV)
Endpoint
Overview
Content-Type:multipart/form-data.
Enqueues the same bulk job as the dashboard Bulk imports hub. Requires entities:bulk_import and org bulk automatic entity import enabled. 202 response includes jobId and effective importMode.
Authentication
Import Modes (entityImportMode)
Legacy values
manual_no_enrichment and automatic_enriched are still accepted on input and normalized to manual / automatic. Responses use the canonical names.Default When Sending Only the CSV
importMode: manual β minimal entity, no enrichments unless you add them explicitly.
Manual with Selected Enrichments
Same semantics as the dashboard Manual mode:monitoring JSON (main entity only in manual mode).
Automatic Mode (Explicit)
autoExecuteIntegrations in automatic mode β all active enrichments for the org.
With depth > 0, send autoExecuteIntegrationsShareholders (JSON) for shareholders.
Manual without Post-Create Rules
entityImportMode β manual is already the default.)
Platform CSV (no mappingId)
Minimum headers: tax_id, type. Recommended: suggested_name (required in manual mode). See Country (ISO2) below for country_code.
Country (ISO2) β Always Required
Every entity row needs a country to create the record (manual and automatic). Provide it in one or both places:
Priority:
country_code on the row β batch country.
If neither is set for a row, the import fails with missing country before the job runs.
Examples:
- Simple CSV, all rows Argentina β headers
tax_id,type+ formcountry=AR. - Advanced CSV, mixed countries β include
country_codeon each row (formcountryoptional fallback). - Advanced CSV, single country β either all rows with
country_code=ARor formcountry=ARwithout the column.
- bulk-entities-template-automatic.csv β use with
entityImportMode=automatic. AR/BR/CL demo rows,depth,create_relationships,execute_all_active_enrichments. - bulk-entities-template-manual.csv β use with
entityImportMode=manual(default). AR/MX/BR demo rows,suggested_namefilled, nodepthcolumns (any ISO2).
apps/web/src/lib/bulk-automatic-entity-import-parse.ts.
Automatic example (truncated):
bulk-entities-template.csv is no longer used by the hub; pick the template matching your entityImportMode.
Column Reference (Platform CSV)
Header names are case-insensitive; spaces become_ (e.g. country code β country_code). Aliases in parentheses.
Same entity, multiple links (CSV): platform CSV supports one relationship per row. If the same person/company appears on several rows with different
related_*, Gu1 does not recreate the entity (duplicate tax_id skip) but still applies that rowβs link. If the edge (source β target + type) already exists, that link is skipped (idempotent). API/JSON alternative: a single create with up to 10 items in relationships[].Removed (2026-06-04): CSV columns
execute_all_active_checks and checks are no longer part of the import contract. Use enrichments, enrichment_group_refs, and execute_all_active_enrichments instead. See Changelog.entityData; CSV values are re-applied at the end (CSV wins on conflicts).
What goes to attributes: attributes.*, legacy metadata.*, or unprefixed columns. Batch-level form field attributes (JSON) is merged with per-row attributes (row wins on key collision).
Simple CSV (only tax_id + type): send batch form field country (ISO2) β required. No country_code column needed.
Custom CSV (non-platform headers): use a saved mappingId β column mapping is defined in the dashboard, not by this table.
- Per-row enrichment columns apply in both modes when set on the row;
depth/ shareholders only inautomatic.
Related-Entity Enrichments per Row (Platform CSV)
Optional βautomatic mode only. Prefix relationship_ (plural alias relationships_).
Custom batch policies (e.g. Paytime): omit
relationship_execute_all_active_enrichments from the CSV if you want step-2 form policy to apply. Use relationship_omit_enrichments per row for one-off exceptions only.
Example: batch all-active on shareholders except global sanctions on children:
Custom CSV
Non-platform column layout βmappingId required (entity_person / entity_company / entity_mixed mapping).
Form Fields
Success Response
Child Enrichments & Monitoring
Automatic mode withdepth > 0 creates shareholders (company roots) or related entities (person roots). Two batch fields control how enrichments and watchlist monitoring apply to those children:
monitoringApplyToRelationships: when false, the monitoring JSON applies to main entities only (monitoring.main); related entities are not added to watchlists even if enrichments run on them. Recommended false with by_root_type when the main entity should enter sanctions monitoring but children should not.
Example (mixed company + person CSV, depth 1, main watchlist only, differentiated children):
autoExecuteIntegrationsShareholders in JSON bulk (POST /entities/bulk/automatic) or relationship_* CSV columns still override the batch policy for that item.
Manual vs. Automatic (Same Job Queue)
Limits
Default When Mode Omitted
Hub vs. API
See also: Bulk imports overview.