Import CRM exports
migrate_crmImport CSV exports from Salesforce, HubSpot, Attio, or another system as a workspace administrator. describe, preview, status and list use read authority; stage, start and run require write authority; explicit tool policies still apply. Start with describe for enabled destinations/fields; preview requires source, a stable sourceInstance, a batch name, files with sourceObject and source ID column, and explicit mappings/exclusions — it writes no CRM records. After the user reviews exact values and exclusions, stage the same preparation, then start the returned jobId for durable background execution. status or list inspect saved progress and every outcome (rows page with rowOffset/rowLimit, max 200). An identical source identity/payload is skipped; changed identities and email/domain collisions need manual resolution — never merge by name. Preserve relationships through referenceObject source IDs and explicitly map owners, stages, currencies, and amount units (money defaults to integer minor units; multiselect to JSON-array strings). Limits: 5000 rows, 2000000 CSV bytes, 3900000 request bytes, 5242880 normalized bytes; reuse the SAME sourceInstance later. run (legacy) advances at most 25 rows synchronously; start retries unsuccessful rows after an execution finishes; replay never duplicates an imported source identity. Per-record approval requirements block this importer, so resolve them first. Historical imports emit no automation events and start no enrichment; custom objects, workflows, attachments and unavailable source history need separate scoping. camelCase keys also accept snake_case aliases (source_instance, job_id, row_offset, row_limit; source_object, id_column on files; object_type, ignored_columns, reference_object, value_map, amount_unit in mappings); outputs are unchanged.
When to use: An administrator imports a Salesforce, HubSpot, Attio or CSV export with explicit mappings and resumable progress.
Example: Help me move our CRM data to Capable.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | A human-readable name for this import batch (1–120 characters), shown on the staged job and in list/status. | |
| files | No | Up to 20 exports as {name, sourceObject, csv, idColumn?}: csv is the raw CSV text with a header row; idColumn names the stable source-id column (auto-detected when omitted). | |
| jobId | No | The job id (uuid) returned by stage, list or status; required for start, run and status. | |
| action | Yes | describe (destinations/fields), preview (validate, no writes), stage (save a batch), start (background execution), run (≤25 rows now), status (one job, paged), list (all jobs). | |
| job_id | No | Alias of jobId. | |
| source | No | The exporting system — salesforce, hubspot, attio or csv; it selects the id-column and column-name conventions used to read the files. | |
| mappings | No | One per sourceObject: {sourceObject, objectType, fields: {column: {field, referenceObject?, valueMap?, amountUnit?}}, ignoredColumns, defaults?}; every column is mapped or ignored. | |
| rowLimit | No | For status: job rows per page (1–200, default 100). | |
| rowOffset | No | For status: job rows to skip (0–5000, default 0); advance by the returned rows.length while hasMoreRows is true. | |
| row_limit | No | Alias of rowLimit. | |
| row_offset | No | Alias of rowOffset. | |
| sourceInstance | No | A stable label for the customer's source CRM instance (1–200 chars); reuse the same value for every later export so source ids resolve to the same records. | |
| source_instance | No | Alias of sourceInstance. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| job | No | ||
| jobs | No | ||
| note | No | ||
| error | No | ||
| applied | No | ||
| preview | No | ||
| destinations | No |