Quickstart: Command Your Data
Configure a connector, map fields visually, apply transformers, validate via dry-run, and execute a clean migration into Aeion OS — the full setup in 6 steps, in under 20 minutes per source system.
Choose Your Source
| Category | Top examples | Count |
|---|---|---|
| **CRM** | Salesforce, HubSpot, Pipedrive, Zoho CRM, Copper | 8 |
| **Commerce** | Shopify, WooCommerce, BigCommerce, Amazon Seller, eBay | 8 |
| **Hospitality** | Opera, Mews, Cloudbeds, Apaleo, Guesty | 14 |
| **Finance** | QuickBooks, Xero, Stripe, NetSuite, Sage Intacct | 6 |
| **Support** | Zendesk, Intercom, Slack, Freshdesk, Help Scout | 6 |
| **Marketing** | Mailchimp, ActiveCampaign, Klaviyo, Marketo, SendGrid | 7 |
| **Developer** | GitHub, GitLab, Linear, Bitbucket, Azure DevOps | 7 |
| **Productivity & Files** | Google Sheets, Airtable, Notion, Monday, Jira | 11 |
| **Recruiting** | Greenhouse, Lever, JazzHR, BreezyHR | 4 |
| **BI** | Tableau, Power BI, Looker, Metabase | 4 |
| **Analytics** | Google Analytics, Mixpanel, Amplitude, Segment | 4 |
| **Collaboration** | SharePoint, OneDrive, Google Drive | 3 |
| **Payroll** | Gusto, Rippling, ADP | 3 |
| **Social** | LinkedIn, X (Twitter), Facebook, Instagram | 4 |
| **HRIS / Payments / Healthcare / ERP / Security / POS / Fleet / Construction / Communications** | (1-2 connectors per category) | 13 |
Select Target Collections
| Source | Default Aeion destination |
|---|---|
| Salesforce | Contacts, Companies, Deals, Activities (Aeion CRM) |
| HubSpot | Same as Salesforce |
| Shopify | Products, Orders, Customers, Discounts (Aeion Commerce) |
| Stripe | Orders, Refunds, Subscriptions (Aeion Commerce / Billing) |
| QuickBooks | Accounts, Transactions, Invoices (Aeion Finance) |
| Zendesk | Tickets, Users, Knowledge Base (Aeion Helpdesk) |
| Slack | Threads, Messages (Aeion Connect) |
| Greenhouse | Candidates, Jobs, Interviews (Aeion Recruit) |
Visually Map the Fields
The engine parses your source data and presents the Visual Field Mapper — drag-and-drop UI showing source fields on the left, Aeion target fields on the right.
Auto-detected mappings:
- Exact-name matches (source
email→ targetemail) - Common synonyms (
first_name→firstName,Acct_Name→companyName) - Type-compatible inferences (source
createdISO date → targetcreatedAt)
Manual mapping for everything else — drag, drop, save.
Mapping options per field:
- Required vs optional — flag fields that MUST be present
- Default value — fill empties with a default
- Computed value — derive a target field from one or more source fields (e.g.,
fullName = firstName + " " + lastName) - Lookup — fetch a related record (e.g., source
companyNamestring → targetcompanyIdUUID via lookup on company name) - Skip — explicitly drop fields you don't want to import
Save the mapping as a template — reuse for future migrations from the same source. Templates can be exported / imported across tenants.
Apply Data Transformers
| Transformer | What it does |
|---|---|
| **Extract Phone** | Normalize "(555) 123-4567" → digits, formatted, or E.164 |
| **Extract Email** | Pull an email address out of free-text |
| **Parse Date** | Convert MM/DD/YYYY, DD/MM/YYYY, or ISO strings → a date |
| **Parse Currency** | "$1,234.56" → 1234.56, handling symbols and separators |
| **Parse Percentage** | "50%" → 0.5 (or 50, if you want the whole number) |
| **Parse Boolean** | "yes"/"1"/"active" and similar → true/false |
| **Uppercase / Lowercase** | Canonicalize casing (e.g. for email matching) |
| **Title Case** | "JOHN SMITH" → "John Smith" |
| **Trim Whitespace** | Strip leading/trailing whitespace |
| **Split to Array** | "a,b,c" → ["a", "b", "c"] for relationship fields |
| **Join Array** | Combine array values into a single delimited string |
| **Concatenate Fields** | Combine multiple source fields into one |
| **Map Value** | Remap one value to another (e.g. "CA" → "California") |
| **Default Value** | Fill empty values with a default |
| **Round** | Round a number to a target precision |
| **Multiply** | Scale a numeric value (e.g. convert units) |
Dry-Run + Validate
Click Preview Import. Aeion validates the mapping itself before you commit to a full run:
- Field mapping — confirms every required target field is mapped
- Type compatibility — flags source/target type mismatches (string vs number, date format, etc.)
- Sample rows — a handful of parsed rows from your source file, so you can eyeball the detected fields and values before mapping
Output of the dry-run:
- Row-by-row preview of a sample of what mapping produces
- Validation warnings with the field + reason
Common dry-run failures:
- Missing required field → add a default value or skip those rows
- Invalid date format → apply the Parse Date transformer
- Referenced record not found → enable "auto-create missing FK records"
- Schema mismatch → check that your tenant's collection extensions are up to date
Execute + Monitor
Click Execute Import. The batch processor chunks the data (default 100 rows per chunk) and streams them into PostgreSQL transactionally.
Progress tracking:
- The job record tracks phase (
pending → validating → mapping → processing → completed/failed/partial) - Processed / success / error / skip counts are recorded on the job as it runs
- Row-level errors are recorded with the exact row + reason
- Cancel a running job with the cancel action in the Admin panel (or
POST /jobs/:id/cancel)
Post-import:
- Review the job's success/error counts and error detail
- Re-run the same connector to pick up records changed since the last run — supply a modified-since filter (many connectors, e.g. Opera and Mews, accept a
modifiedSinceoption) so each run pulls only recent changes, and smart upserts keep repeated runs duplicate-free. Trigger it manually, or point your own external scheduler at the import-job API for a recurring cadence. Singularity doesn't track the watermark for you — you supply the cutoff.
Integration Recipes
Incremental re-sync. After a one-shot historical migration, re-run the same connector with a modified-since filter so it fetches only records changed since your last pull (connectors that support it accept a modifiedSince option; you supply the cutoff — Singularity doesn't track the watermark for you). Re-trigger it on whatever cadence your own tooling calls the import-job API.
Multi-source unification. Run separate Salesforce + HubSpot imports targeting the same crm_contacts collection. Map both sources' email/phone fields with the Lowercase / Trim transformers applied to your match key, and use the job's matchField upsert option so records present in both sources land as one unified contact.
Per-tenant routing. For multi-tenant Aeion deployments, configure source-side filters so different tenants receive different subsets. Useful for white-label platforms ingesting from a single multi-tenant source.
Troubleshooting
Connector won't authenticate. Check credentials in the connector config. For OAuth-based sources, re-run the OAuth flow — refresh tokens occasionally expire if the source revokes them. For API-key sources, verify the key has the right scopes.
Import job hangs in "Processing" forever. Check the job's progress counts (processed/success/error/skip) on the Import Job record to see whether it's actually stalled or just working through a large chunk. If it's genuinely stuck, cancel it from the Admin panel (or POST /jobs/:id/cancel) and re-run.
High error rate on a specific field. Inspect the error CSV — usually a transformer issue (date format inconsistency, currency formatting variant, etc.). Add a custom transformer or relax the validation.
Memory exhaustion on large imports. The default chunk size (100 rows) is conservative. Increase it for simple-shape imports with few relationships; keep it low (or lower) for complex-shape imports with deep FK resolution. Configure in connector settings.
FK resolution slow. Auto-creating missing related records (companies for contacts, products for orders, etc.) can be expensive. For one-shot historical migrations, set "FK strategy = create-or-link" upfront so the engine creates missing records efficiently; for ongoing incremental sync, set "FK strategy = link-or-skip" to avoid runaway creation.
Duplicate records appearing. Usually a dedupe-key mismatch — source records might have inconsistent casing, whitespace, or other normalization differences. Add the Lowercase / Trim transformers to your dedupe key fields.
Frequently Asked Questions
Yes — re-running a connector with a modified-since filter fetches only records changed since your last pull (you supply the cutoff; Singularity doesn't track it automatically). Aeion doesn't ship a built-in cron scheduler for this yet; point your own scheduler (or CI job) at the import-job API on whatever cadence you need.
The Import Engine is designed for resilience. Failed rows are skipped, the error counter increments, and processing continues. The job record tracks the error detail per row so you can review and fix the underlying issue, then re-run.
Yes. Dedicated parsers for raw XML, QuickBooks `.iif`, Banking `.ofx`, vCard `.vcf`, Excel `.xlsx`, JSON, and CSV. Other delimited or text-based formats (TSV, iCal, parquet, markdown) drop through the generic CSV / JSON parsers and reach the field-mapper unchanged.
Connector credentials (API keys, OAuth tokens) are always encrypted at rest. Use the Zod schema validation step and field-mapping "Skip" option to keep especially sensitive source columns (SSNs, card numbers) out of the target collection entirely if you don't need them migrated.
Two paths today: (1) export to CSV/JSON/XML and use the matching file connector, or (2) if your tool exposes a REST API, most OAuth/API-key-based sources follow the same connector pattern as the catalog entries — contact support about adding a connector for your specific API.
There's no hard row-count limit, but very large migrations (multi-million records) benefit from a larger chunk size and careful FK-strategy tuning (see Troubleshooting above) since processing runs as a single job rather than a distributed worker pool today.
Yes. Per-job scope configuration — pick exactly which collections to import. You can run multiple jobs from the same source for different scopes (e.g., contacts + companies in job A; deals + activities in job B).
Singularity doesn't have an import-specific rollback action today. If you're on a tier with Aeion Aegis, use its Version History / bulk-undo or point-in-time restore to recover affected collections — that's a platform-wide capability, not something scoped to a single import job.
Re-run the dry-run preview — it will surface new or changed fields as mapping/validation issues. Update your field mappings for the new shape, then re-run the import.