CRM migration
Field-level mapping, validation, and rollback between Signpost and Twenty CRM. We move data and schema; workflows are rebuilt natively in Twenty CRM.
Signpost
Source
Twenty CRM
Destination
Compatibility
9 of 11
objects map 1:1 between Signpost and Twenty CRM.
Complexity
BStandard
Timeline
4-6 weeks
Overview
Moving from Signpost to Twenty CRM is a structural migration for local service businesses that have outgrown Signpost's opaque pricing and the manual oversight required to keep Mia's automated outreach from over-messaging customers. Twenty CRM, built on an AGPL-3.0 open-source license and backed by Y Combinator, offers self-hosted deployment at no licensing cost, giving businesses full data ownership with no per-contact billing. We map Signpost's Contacts to Twenty's People object, Signpost Businesses to Twenty Companies, and Signpost Campaigns to Twenty Opportunities or Tasks depending on the campaign type. The migration uses Twenty's REST and GraphQL APIs since Twenty does not have a native CSV import UI as of 2026. Mia's behavioral automation rules, the review solicitation history, and the shared inbox conversation record do not migrate; we document these for the customer's admin to reconstruct in Twenty and advise customers to archive shared inbox threads before migration begins. Pipeline staging, contact scoring logic, and campaign targeting rules require manual reconstruction post-migration.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a Signpost object lands in Twenty CRM, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
Signpost
Contact
Twenty CRM
Person (People)
1:1Signpost Contacts map to Twenty People records. Standard fields (name, phone, email, address, business association) migrate 1:1. Signpost's behavioral properties managed by Mia (last_contacted_date, engagement_score, review_request_status) migrate as custom fields on the People object. Note that Twenty's standard Person schema is lean—fields like phone_type, multiple email addresses, and jobTitle require custom field creation in Settings → Data Model before import. We flag these at scoping and create them via API before data migration begins.
Signpost
Business
Twenty CRM
Company
1:1Signpost's per-business CRM model maps directly to Twenty's Company object. Business name, address, website, and parent-child franchise structure migrate as Company fields. Custom properties on the Business record migrate as custom fields on the Company. The Company record is created before any related People import so that the People-Company relationship is satisfied at insert time.
Signpost
Campaign (Email/SMS)
Twenty CRM
Opportunity
lossySignpost campaigns (email and SMS) do not have a native Opportunity equivalent in Twenty. We map campaign records to a Campaign custom object we create in Twenty, capturing campaign name, type (email/SMS), target audience (tag-based), and campaign status. The automated trigger logic managed by Mia (send timing, delay intervals, branching conditions) cannot migrate; we document it as a written workflow audit and recommend the customer recreate campaign sequences in a tool like n8n or a custom automation script post-migration.
Signpost
Review Request
Twenty CRM
Custom field on Person
lossySignpost's review solicitation object tracks request timing, customer response, and positive/negative triage. Twenty has no native review object. The most recent review request status and customer response migrate as custom fields (most_recent_review_request_date, most_recent_review_status, review_response_type) on the People record. Full solicitation history across all time is flattened into a text notes field or a custom Reviews custom object with one record per solicitation event. We advise customers to export a historical review report from Signpost before migration begins.
Signpost
Appointment
Twenty CRM
Task
1:1Signpost appointment records (scheduling data, customer association, status, appointment type) map to Twenty Task records. We set Task.status based on appointment status (scheduled → Open, completed → Completed, cancelled → Cancelled) and preserve appointment type as a custom Task field. Location and notes from the appointment migrate to Task.location and Task.body. Custom appointment types that do not map to Twenty's standard Task fields require custom field creation during schema setup.
Signpost
Custom Properties (Contact-level)
Twenty CRM
Custom fields on Person
1:1Signpost custom fields on contacts migrate to Twenty People custom fields. Field types are preserved where possible (text → text, number → number, date → date, checkbox → boolean, picklist → select). Incompatible field types are flagged for customer review during scoping. Custom fields must be created in Twenty's Settings → Data Model before import; the CSV import creates records only, not fields.
Signpost
Custom Properties (Business-level)
Twenty CRM
Custom fields on Company
1:1Signpost custom fields on businesses migrate to Twenty Company custom fields using the same type-preservation logic as contact-level custom properties. Industry, employee count, and annual revenue (common business-level fields in Signpost) migrate as custom Company fields if Twenty's standard fields do not cover the use case.
Signpost
Tag
Twenty CRM
Tag
1:1Signpost contact tags migrate to Twenty Tags attached to the People record. Tags used for campaign targeting are preserved as tag values. Tags that represented Mia behavioral scoring segments (e.g., hot_lead, at_risk, review_requested) are migrated as tags but flagged in the scoping report since the behavioral scoring logic that assigned them is not transferable.
Signpost
User / Owner
Twenty CRM
User
1:1Signpost user accounts and owner assignments on records map to Twenty User records. We resolve owners by email match. Inactive or permission-specific Signpost users may need to be created as placeholder User accounts in Twenty. IMPORTANT: Twenty requires all referenced Users to be created and active before importing records that assign OwnerId; we sequence User provisioning before Contact import.
Signpost
Loyalty / Referral Program
Twenty CRM
Custom Object
1:1Referral and loyalty program enrollment records migrate as a custom LoyaltyProgram custom object in Twenty with fields for program_name, enrollment_date, referral_status, and points_balance. Program rules (earn rules, reward tiers, expiration logic) do not migrate; we document them in the written inventory for the customer's admin to reconstruct in Twenty's custom object logic or an external loyalty tool.
Signpost
Payments (Signpost Payments)
Twenty CRM
Custom Object
1:1Signpost Payments tracks payment status against invoices or estimates. Payment records migrate as a custom Payments custom object linked to the People record, capturing payment_amount, payment_date, payment_status, and invoice_reference. Signpost Payments is a separate product tier; we scope this object only if the customer confirms Signpost Payments is in active use. Payment processing integration (Stripe, Square) is not migrated; the customer sets up payment processing separately in Twenty or retains the existing processor.
| Signpost | Twenty CRM | Compatibility | |
|---|---|---|---|
| Contact | Person (People)1:1 | Fully supported | |
| Business | Company1:1 | Fully supported | |
| Campaign (Email/SMS) | Opportunitylossy | Fully supported | |
| Review Request | Custom field on Personlossy | Fully supported | |
| Appointment | Task1:1 | Fully supported | |
| Custom Properties (Contact-level) | Custom fields on Person1:1 | Fully supported | |
| Custom Properties (Business-level) | Custom fields on Company1:1 | Fully supported | |
| Tag | Tag1:1 | Fully supported | |
| User / Owner | User1:1 | Fully supported | |
| Loyalty / Referral Program | Custom Object1:1 | Fully supported | |
| Payments (Signpost Payments) | Custom Object1:1 | Fully supported |
Gotchas + challenges
Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.
Signpost gotchas
Mia workflow automations are not exportable
Shared inbox message history is not exported
Slow contact list performance indicates export risk
Review request history requires custom property reconstruction
Billing model and contract terms are opaque
Twenty CRM gotchas
Import order is enforced and critical
Export limited to 20,000 records and visible columns only
Soft-deleted records count toward uniqueness and trigger restores
API rate limits cap at 200 req/min on Organization tier
No native email sequences — follow-up cadences require external tools
Pair-specific challenges
Migration approach
Discovery and scoping
We audit the source Signpost account across objects in scope (Contacts, Businesses, Campaigns, Appointments, Review Requests, Custom Properties, Tags, Loyalty/Referral Programs, and Signpost Payments if applicable). We document active Mia automation rules via customer interview, capture shared inbox volume for archive planning, and assess export performance by running a sample contact extraction to identify any throttling or timeout behavior. The discovery output is a written migration scope, a data retention recommendation (what to migrate vs archive), and a Twenty workspace preparation checklist.
Twenty workspace preparation
We create the target schema in Twenty before any data migration begins. This includes creating all required custom fields on People and Company objects (phone_type, jobTitle, department, industry, most_recent_review_request_date, most_recent_review_status, and any other Signpost custom properties), creating the Campaign custom object, creating the Payments custom object if applicable, and creating the LoyaltyProgram custom object. We also create the Twenty Users matching the Signpost Owner list so that OwnerId references are valid at import time. Schema creation uses Twenty's Settings → Data Model API endpoints.
Signpost export and data cleanup
We export data from Signpost in object-dependent batches: Businesses first (to satisfy Company foreign keys), then Contacts, then Appointments, then Campaign records, then Custom Properties and Tags. For customers with more than 10,000 contacts, we segment the export by creation date cohort to avoid mid-job timeouts caused by Signpost's known contact list performance issues. We deduplicate records, standardize phone number formats, and flag any Signpost custom field types that are incompatible with Twenty's field model for customer review.
Review solicitation history reconstruction
We export Signpost's review request history and flatten it into a format suitable for Twenty's schema. The most recent review request status and response type become custom fields on the People record. Full solicitation history across all time (request dates, response dates, positive/negative flag) is written to a custom Reviews custom object or a notes text field depending on the customer's data volume. We advise customers to pull this report from Signpost's analytics module before migration begins.
API-based import into Twenty
We use Twenty's REST API to import data in dependency order: Companies (from Signpost Businesses) first, then People (from Signpost Contacts with CompanyId resolved), then Tasks (from Appointments), then custom object records. We batch records in groups of 100-500 per API call with error handling and retry logic for 429 rate limit responses. OwnerId is resolved at import time by email lookup against the pre-provisioned Twenty User list. Each import phase emits a row-count reconciliation report before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze Signpost writes during cutover, run a final delta migration of any records modified during the migration window, and validate the Twenty workspace against the Signpost source by matching record counts, spot-checking 25-50 records, and confirming relationship integrity (People linked to correct Companies, Tasks linked to correct People). We deliver the Mia automation audit document to the customer's admin team with a recommended rebuild approach for campaign sequences in Twenty or a companion automation tool. Shared inbox archiving remains the customer's responsibility. We provide a one-week hypercare window for reconciliation issues.
Platform deep dives
Signpost
Source
Strengths
Weaknesses
Twenty CRM
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 1 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Signpost and Twenty CRM.
Object compatibility
1 of 8 objects need a mapping; the rest are 1:1.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Signpost: Not publicly documented.
Data volume sensitivity
Signpost doesn't expose a bulk API — REST + parallelization used for high-volume runs.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Signpost to Twenty CRM migration scoping. Not seeing yours? Book a call.
Walk through your Signpost to Twenty CRM migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave Signpost
Other ways to arrive at Twenty CRM
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.