CRM migration
Field-level mapping, validation, and rollback between FotoNotes and Freshsales. We move data and schema; workflows are rebuilt natively in Freshsales.
FotoNotes
Source
Freshsales
Destination
Compatibility
10 of 10
objects map 1:1 between FotoNotes and Freshsales.
Complexity
BStandard
Timeline
48–96 hours
Overview
FotoNotes and Freshsales occupy almost opposite ends of the business software spectrum. FotoNotes is a field-service and property-inspection platform built around a Container/Containee hierarchy — where a Property record (Container) can hold multiple Work Orders and Inspections (Containees), each with GPS coordinates, signature captures, photo documentation, and job-costing fields. Freshsales is a sales CRM built around Leads, Contacts, Accounts, and Deals with an AI layer (Freddy AI), built-in phone/email/chat, and lifecycle stage tracking. The migration therefore requires not just field translation but a structural re-conceptualization: FotoNotes data does not fit naturally into Freshsales CRM objects and must be decomposed carefully. FlitStack AI extracts FotoNotes data via batch exports (CSV and bulk download where available) and maps it into Freshsales using their REST API. We migrate all standard objects — Accounts representing Properties, Tasks representing Work Orders, Notes representing Inspections, Contacts representing Customers and Users — with custom fields on each object to preserve FotoNotes identifiers, coordinates, job types, and photo counts. FotoNotes has no documented public API, so migration depends on the platform's built-in export mechanisms and the CSV export feature. This affects sequencing and timing. No workflows, automations, or permission structures migrate from FotoNotes; those are field-service concepts with no Freshsales equivalent and must be rebuilt if needed. The Container/Containee parent-child hierarchy maps to Freshsales Account lookups using custom fields so the property tree remains traceable after 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 FotoNotes object lands in Freshsales, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
FotoNotes
Container (Property)
Freshsales
Account
1:1Each FotoNotes Property record (Container) migrates as one Freshsales Account. We create custom fields on the Account to store the original FotoNotes Container ID (fotonotes_container_id__c), parent container ID for hierarchy (fotonotes_parent_id__c), GPS coordinates (fotonotes_lat__c, fotonotes_lng__c), photo count (fotonotes_photo_count__c), and job type (fotonotes_job_type__c). The Account Name maps to the Property name. This preserves the full FotoNotes property context inside Freshsales without requiring a separate custom object.
FotoNotes
Containee (Work Order)
Freshsales
Task
1:1FotoNotes Work Order records migrate as Freshsales Tasks linked to the parent Account (Property). Task Subject becomes the Work Order title. We map FotoNotes status values (New, In Progress, Completed, On Hold) to Freshsales Task status (Not Started, In Progress, Completed, Waiting on someone else) using value mapping. Priority migrates as a custom pick-list field (Task Priority). Scheduling date and completion date store as Task Due Date and custom completion date field respectively. The original Work Order ID stores as fotonotes_work_order_id__c on the Task for traceability.
FotoNotes
Containee (Inspection)
Freshsales
Note
1:1FotoNotes Inspection records migrate as Freshsales Notes linked to the parent Account. The Note Title becomes the Inspection name. Inspection details, findings, and checklist results map into the Note Body field as structured text. Photo references and attachments from the Inspection re-upload as Freshsales Files linked to the Note. A custom field (fotonotes_inspection_id__c) stores the original FotoNotes ID. Since Freshsales Notes support rich text, formatted inspection checklists render inside the Note.
FotoNotes
Customer
Freshsales
Contact
1:1FotoNotes Customer records — property owners or clients associated with a Container — migrate as Freshsales Contacts linked to the parent Account. Contact name, email, phone, and address fields map directly. A custom field (fotonotes_customer_id__c) preserves the original FotoNotes Customer ID. Customer portal visibility settings from FotoNotes do not have a Freshsales equivalent and are noted for manual configuration post-migration.
FotoNotes
User / Field User
Freshsales
Contact / Owner
1:1FotoNotes Users (internal staff who create and manage Work Orders) and Field Users (technicians who execute work) do not map directly to Freshsales Users — Freshsales system users are licensed seats, not field workers. We migrate User records as Freshsales Contacts with a custom field (fotonotes_user_id__c) and a role flag (is_fotoNotes_field_user__c) to distinguish field technicians from administrative users. If FotoNotes User email matches a Freshsales system user by email, we resolve Owner accordingly for Task assignment.
FotoNotes
Container Hierarchy (Parent/Child)
Freshsales
Account.ParentId Lookup
1:1FotoNotes supports parent-child Container relationships (e.g., a Building as parent, individual Units as children). Freshsales Accounts support a native Parent Account lookup. We map FotoNotes parent container to Freshsales ParentId on the Account object. Child Container records migrate first, then the parent — in the correct sequence — so the ParentId foreign key resolves on insert. A custom field (fotonotes_container_level__c) stores the hierarchy depth for reporting.
FotoNotes
Attachment / Photo
Freshsales
File Attachment
1:1FotoNotes photo attachments and documents on Work Orders and Inspections re-upload to Freshsales as Files linked to the parent Task or Note. We download photos from FotoNotes export bundles and re-upload to Freshsales Files, preserving original filenames and capture timestamps. Freshsales file attachment limits apply (25MB per file). Inline images in inspection notes are extracted and re-hosted as separate Files.
FotoNotes
Work Order Status
Freshsales
Task Status
1:1FotoNotes Work Order status values (New, In Progress, On Hold, Completed, Cancelled) require value-by-value mapping to Freshsales Task status values (Not Started, In Progress, Waiting on someone else, Completed). Status change timestamps from FotoNotes store as custom datetime fields on the Freshsales Task since Freshsales does not track Task status history natively. This preserves the full work-order lifecycle for audit and reporting.
FotoNotes
Signature Capture
Freshsales
File Attachment
1:1FotoNotes captures customer and field-worker signatures on Work Orders as image files. These migrate as Freshsales Files attached to the corresponding Task. A custom field (fotonotes_signature_type__c) records whether the signature is from a customer or field user. Freshsales does not have a native Signature field — the attachment approach preserves the artifact and links it to the record.
FotoNotes
Report Template
Freshsales
No Equivalent
1:1FotoNotes Report Templates — configurable PDF report layouts with branding and section ordering — have no Freshsales equivalent. Freshsales does not support custom PDF report templates. We export FotoNotes report templates as reference documents and recommend rebuilding the most critical templates in Freshsales or a third-party PDF tool post-migration. This is disclosed upfront so teams budget the rebuild effort.
| FotoNotes | Freshsales | Compatibility | |
|---|---|---|---|
| Container (Property) | Account1:1 | Fully supported | |
| Containee (Work Order) | Task1:1 | Fully supported | |
| Containee (Inspection) | Note1:1 | Fully supported | |
| Customer | Contact1:1 | Fully supported | |
| User / Field User | Contact / Owner1:1 | Fully supported | |
| Container Hierarchy (Parent/Child) | Account.ParentId Lookup1:1 | Fully supported | |
| Attachment / Photo | File Attachment1:1 | Fully supported | |
| Work Order Status | Task Status1:1 | Fully supported | |
| Signature Capture | File Attachment1:1 | Fully supported | |
| Report Template | No Equivalent1: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.
FotoNotes gotchas
Container-to-contained field inheritance is implicit
Batch PDF reports are the only bulk export mechanism
Vendor sub-accounts require hierarchical mapping
FotoNotes is now SiteCapture — documentation split
Freshsales gotchas
Freddy AI is Pro-tier only despite heavy marketing
Post-migration emails and sequences are disabled
Bot session credits are a one-time 500-session allocation
Phone credits charged per minute with no cap
File storage limits scale with plan tier
Pair-specific challenges
Migration approach
Audit FotoNotes export capabilities and plan extraction sequencing
Since FotoNotes has no public API, we begin by identifying the available export mechanisms on each FotoNotes plan — CSV export scope, batch PDF download limits, and any data retention policies. We map each Container, Containee, and attachment type to a Freshsales target object and identify which custom fields are needed. The audit also surfaces which FotoNotes users have export permissions and whether the account plan supports bulk operations. This step determines the extraction timeline and whether we need to request plan upgrades before migration begins. We deliver a data inventory document listing every object type, record count, and photo attachment volume before proceeding.
Set up Freshsales schema with custom fields and parent-account hierarchy
We create all required custom fields on Freshsales Accounts, Tasks, Notes, and Contacts before any data is written — including fotonotes_container_id__c, fotonotes_parent_id__c, fotonotes_property_id__c, fotonotes_lat__c, fotonotes_lng__c, fotonotes_photo_count__c, fotonotes_job_type__c, fotonotes_priority__c, fotonotes_completed_date__c, fotonotes_timezone__c, fotonotes_job_cost__c, fotonotes_containee_type__c, and fotonotes_sequence__c. We also configure the Account.ParentId hierarchy for multi-level Container relationships. We deliver a Freshsales setup checklist so your admin can pre-create the schema or approve our field creation before the migration run.
Resolve owners and users by email match against Freshsales users
FotoNotes Field Users and Managers are matched to Freshsales system users by email address. We generate a pre-migration owner resolution report listing every FotoNotes user, their matched Freshsales user (if any), and records assigned to unmatched users. Your team either invites the missing users to Freshsales or designates a fallback owner. We do not migrate a record without a confirmed OwnerId — unowned records in Freshsales cause reporting gaps. This step runs concurrently with schema setup so owner resolution is complete before data insertion begins.
Run a sample migration with field-level verification before full data commit
We migrate a representative slice — typically 100–300 records spanning the full range of object types (Containers, Containees of different types, Customers, photos) — and generate a field-level diff comparing source FotoNotes values to destination Freshsales values. We verify Container-to-Account name mapping, Work Order-to-Task status value mapping, Containee-to-Note body rendering, photo attachment presence, and ParentId hierarchy resolution. You review the sample diff and approve before we schedule the full migration run. This prevents rework on the full dataset.
Execute full migration and capture in-flight changes during delta-pickup window
The full migration runs against Freshsales using their REST API. A delta-pickup window (24–48 hours post-migration) captures any FotoNotes records created or modified during the cutover period so Freshsales reflects the final state at go-live. We run field-level validation on every record — Container count, Containee count, status mapping completeness, photo attachment count — and generate an audit log. If reconciliation reveals gaps, one-click rollback reverts the Freshsales environment to its pre-migration state. Your team retains full FotoNotes access throughout; FlitStack uses scoped read access only.
Platform deep dives
FotoNotes
Source
Strengths
Weaknesses
Freshsales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 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 FotoNotes and Freshsales.
Object compatibility
2 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
FotoNotes: Not publicly documented.
Data volume sensitivity
FotoNotes 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 FotoNotes to Freshsales migration scoping. Not seeing yours? Book a call.
Walk through your FotoNotes to Freshsales migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave FotoNotes
Other ways to arrive at Freshsales
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.