Import from Salesforce.
The Salesforce importer brings accounts, opportunities, contacts, activities, and custom objects into wrxstack CRM. The work graph absorbs Salesforce relationships natively. Two-way sync is available for teams that want to keep both systems alive during a transition.
- How to authorize the Salesforce connection (Connected App + OAuth)
- How to map Salesforce objects to wrxstack CRM nodes
- How to handle custom fields and history
- When to use two-way sync vs a one-time cutover
Create the Connected App
In Salesforce Setup, App Manager → New Connected App.
- Name:
wrxstack - API → Enable OAuth Settings → Callback URL:
https://auth.wrxstack.com/oauth/salesforce/callback - Selected OAuth Scopes: Full access (full), Manage user data via APIs (api), Perform requests anytime (refresh_token, offline_access)
- Require Secret for Web Server Flow: enabled
Save. Note the Consumer Key and Consumer Secret. Paste both into wrxstack at Settings → Integrations → Salesforce.
Object mapping
| Salesforce object | wrxstack node | Relationship |
|---|---|---|
| Account | CRM: Account | 1:1 |
| Opportunity | CRM: Opportunity | about → Account |
| Contact | CRM: Contact | about → Account |
| Task | Task | about → Opportunity or Account |
| Event | Meeting | about → Opportunity or Account |
| Note | Document | about → parent node |
| Custom object | Configurable | See below |
Custom objects need an explicit mapping. The UI generates a default skeleton in import.toml; the most common edit is to point a custom object at an existing node type instead of creating a new one.
Stage history
Salesforce stores opportunity stage transitions in OpportunityHistory. The importer reads that table and writes one audit entry per transition. The result: opening an opportunity in wrxstack shows the full Salesforce stage timeline as if it had happened on the platform.
Custom fields
All custom fields on standard objects are preserved. They show up under a "Salesforce" expansion section on the wrxstack node and are queryable from the API as node.fields.salesforce.<name>.
If you have a custom field you want to lift to a first-class wrxstack field (so it's queryable in search), map it in import.toml:
[[fields]] salesforce = "Account.HealthScore__c" wrxstack = "account.health_score" type = "float"
Two-way sync
Two-way sync keeps Salesforce and wrxstack in step for a transition window. Writes on either side are mirrored within sixty seconds. Conflict resolution is last-write-wins per field; in practice a real conflict is rare because most fields are owned by one side or the other.
Two-way sync is a paid add-on. Most teams run it for 30 to 90 days, then turn off Salesforce. Audit logs in wrxstack continue to surface "sourced from Salesforce" for any node created during the sync window.
Run the import
Dry run first. The summary shows objects, fields, and history rows. Once you're happy, click "Run import." For a workspace with 10,000 accounts and 50,000 opportunities, expect about three hours. The job is resumable; if it fails mid-run, retry picks up where it left off.
Next steps
- Documents API for post-import scripted cleanup.
- Sync customer email to CRM recipe.