CRM Export Completeness: Check Records, Links, and Files

CRM export completeness means proving that an export contains the records, fields, relationships, history, and file contents required for its intended use. A successful download and a matching row count are insufficient. Before relying on the package, reconcile stable IDs, confirm the export scope, and open the files the business needs to keep.
This guide is for CRM administrators preparing a migration, independent archive, or recovery exercise. Our executed, invented example contains six contact rows against six expected contacts, yet one contact is missing. It also exposes a missing relationship and two file defects. Use these checks before accepting the source package in your CRM migration checklist.
Define CRM export completeness before downloading
Start with a written export contract. State the purpose, included objects, record filters, required fields, relationship types, file versions, and observation time. Name the person who can approve exclusions. An archive for account research may need less than a migration that must preserve working sales history.
Write a separate pass condition for each layer:
| Layer | Evidence needed | A failure a row count misses |
|---|---|---|
| Records | Expected source IDs compared with exported IDs | A duplicate replacing a missing contact |
| Fields | Required column list and value checks | An absent opt-out column |
| Relationships | Source and target IDs, plus required relationship labels | The correct contact linked to the wrong deal |
| History | Required activity and change-history scope | Current properties without past values |
| Files | File IDs, downloaded contents, versions, and readable samples | A filename or URL without the document |
| Configuration | Separate inventory of required definitions | Data without the workflow needed to use it |
Do not label every absent item an error. An intentionally excluded historical object belongs in an exclusion register. An object nobody has checked belongs in an unresolved queue. Both should remain visible in the acceptance report.
Use the CRM requirements checklist to decide what must remain usable after the move. If you only need a mailing list, define that narrower scope rather than calling the output a complete CRM backup.
Three documented export details to check
We reviewed the following official documentation on October 24, 2026. These are observations about documented export routes, not results from testing customer accounts. Confirm the current options in your own account before running a large export.
HubSpot record exports follow selected settings
HubSpot's record export documentation says the default file includes properties and associations in the selected view. It also distinguishes exporting all properties from exporting all properties with associations. The default association option includes up to 1,000 associated IDs per association column; including all associated records is a CSV option.
The same documentation directs readers to separate routes for contact activities such as calls and notes. Therefore, treat a record export as one part of the package. Save the selected view and customization settings, check association coverage, and specify a separate activity extraction if the acceptance contract requires it.
Salesforce Data Export has separate file choices
Salesforce's Data Export instructions provide separate selections for images, documents and attachments, and for Salesforce Files and CRM Content document versions. They also say formula and roll-up summary fields are excluded. For recurring exports, newly created objects require reselecting the all-data option.
Record the object selection and file settings rather than assuming a scheduled job still covers today's schema. If a derived value is required for migration acceptance, define how you will reproduce or separately retain it. A missing calculated column is different from an unexpectedly missing stored field.
An API page is not the whole result set
HubSpot's official object API client reference describes a page cursor returned in paging.next.after when more results exist. Its page method also accepts property, association, history, and archived-record options.
An API-based extraction needs an endpoint-specific plan for every required population. Record the cursor chain and completion evidence. Confirm the association and history behavior separately; following record pages alone does not prove that every dependent resource was extracted.
CRM export completeness checks for records and fields
Fix the denominator and the time window
Get expected source IDs through an independently verified source query or view with documented filters and access scope. Reusing the same incomplete extraction to produce both the export and the expected list makes the comparison circular.
Capture the exporting identity, role, selected filters, archived-record policy, timezone, and start and finish times. Check a few records known to be outside the operator's usual team view. If access is restricted, obtain an authorized reference population or explicitly mark the unverified scope. Do not infer that an empty result proves no records exist.
Records can change during extraction. For a cutover, agree a freeze or a documented reconciliation window with a final delta and deletion handling. Keep the time boundaries with each object export. Matching contacts from one moment against deals from another can create apparent missing links, even if each individual request completed.
Set responsibility for these choices with the CRM field ownership guide. When history comes from another connected system, establish its eligibility rules with the CRM activity sync audit.
Compare IDs before totals
For each object, report exported rows, distinct exported IDs, expected IDs absent from the package, unexpected IDs, and repeated IDs. Preserve IDs as text, including leading zeros. Do not use display names or email addresses as substitutes unless the contract explicitly defines them as stable unique keys.
If a spreadsheet is used for inspection, retain the original file and use an import method that preserves identifiers and timestamps. Check that quoted commas, line breaks, and non-English characters survive parsing. Count parsed records rather than physical text lines, because a single CSV field can contain line breaks.
Avoid cleaning away discrepancies before investigating them. A repeated row may indicate a retried page, an intentional relationship expansion, or a separate source duplicate. Explain the cause before collapsing it. The CRM data hygiene checklist covers source cleanup; this audit checks what the extraction delivered.
Check required columns and their meanings
Compare the export header with the approved field inventory. A blank value, a missing column, and an inaccessible field are different findings. For important columns, inspect known populated examples and legitimate blanks. Retain internal property names and definitions when display labels could be ambiguous.
Do not convert an absent consent value to permission to send. Keep exclusions in force until the source status is established. If marketing data is moving too, use the email marketing migration checklist for the separate consent and suppression workstream.
For controlled lists, retain both the source value and the mapping decision. The CRM picklist cleanup example shows why collapsing labels can change reports even when every row is present.
Reconcile relationships and file contents separately
Export relationship pairs with the object type on each end. Add labels, roles, direction, and primary-status information when the destination process needs them. A contact ID and deal ID prove an edge exists; they do not prove that the contact is the decision maker.
Check missing expected edges, unexpected edges, and dangling edges whose endpoints are absent from the package. Equal edge totals can hide a substitution. Where related records are intentionally excluded, save the reason and decide whether the relationship should remain as an external reference or be removed during transformation.
Review identity changes before declaring an edge broken. A CRM merge survivorship policy should preserve the mapping between retired IDs and surviving records. Keep that crosswalk with the export.
Files need a separate manifest. Record each file ID, parent record, required version, filename, downloaded path, and outcome. A URL that works while signed in is not evidence that an independent archive contains the file. Open representative downloaded files without relying on the retiring CRM session.
Where source bytes or trustworthy source checksums are available, compare hashes as well as counts. A checksum proves byte equality against that reference, not readability, authenticity, or successful restoration. If the source reference is unavailable, record that limitation and retain the checks you can perform: download success, byte size, file type, and manual opening.
Worked audit: six rows, five distinct contacts
We created and executed a small Python audit on October 24, 2026. Its inputs are invented: six expected contacts, three expected contact-to-deal relationships, and two expected text files. Two supplied record pages deliberately repeat C03, omit C06, and leave a next-page cursor unconsumed.
The exported header omits opt_out. The relationship package replaces C02–D01 with C05–D99, where D99 does not exist in the supplied deals. The file package omits F02 and removes the final newline from F01. No vendor account, API call, customer data, or actual export was used.
Download the complete audit script and its executed results. Run it with Python 3 using python3 replay.py; it uses only the standard library.
| Check | Observed result | Acceptance decision |
|---|---|---|
| Contact row total | 6 rows against 6 expected contacts | Totals match, continue checking |
| Contact identity | 5 distinct IDs; C03 repeated; C06 absent | Fail record coverage |
| Page completion | Last supplied page still points to p3 | Incomplete extraction evidence |
| Required fields | opt_out absent from the header | Fail field coverage |
| Relationships | 3 exported against 3 expected; C02–D01 missing; C05–D99 unexpected and dangling | Fail relationship coverage |
| File contents | F02 absent; F01 differs from the source bytes | Fail file coverage |
This exercise demonstrates why independent checks are necessary. It does not establish an error rate or test either vendor's exports, pagination implementation, permission behavior, file downloads, or restore process. It checks a static package against explicit expected inputs. Production acceptance also needs value-level checks, access review, time consistency, and a destination rehearsal.
The unresolved cursor is an additional warning, not proof that C06 is on page p3. Investigate and retrieve the next page through the real endpoint, then rerun the comparison against the independent expected population.
Accept the package before planning retirement
Keep an untouched copy of the source package. Save a manifest with extraction settings, schema definitions, timestamps, object and relationship counts, exceptions, file outcomes, and the identity of the reviewer. Make transformations in working copies so a later discrepancy can be traced back to the original delivery.
Classify each finding as passed, intentionally excluded, failed, or unresolved. Name an owner and corrective action for failures and unresolved items. An administrator should be able to explain each difference without reconstructing the job from memory.
Rehearse the intended use in an isolated destination: rebuild representative records, relationships, and files, then run the business tasks the package is supposed to support. A readable export may still lack the configuration or historical context required to recreate a working CRM. Coordinate that rehearsal with the CRM implementation checklist.
For a new CRM purchase, put export acceptance in the trial plan. Ask for a demonstration using a small approved sample with multiple relationships, an archived record, a custom field, an activity, and a file. Cost the recurring extraction and validation work using the CRM total cost of ownership model.
Actionable takeaways
- Define the export's purpose and required scope before running it.
- Compare stable IDs against an independently established source population.
- Reconcile required fields, relationship pairs, history, and downloaded files separately.
- Retain extraction settings, time boundaries, exceptions, and source packages.
- Rehearse the intended use before retiring access to the old system.
Frequently Asked Questions
What is CRM export completeness?
It is the degree to which an export covers the agreed records, fields, relationships, history, files, and supporting definitions. Completeness is relative to a written purpose and scope, so an acceptable reporting extract may be insufficient for a migration.
Why can the row count match when records are missing?
A repeated record can offset an absent one. Relationship joins can also expand rows without adding distinct records. Compare unique stable IDs and investigate repeats instead of accepting the total alone.
Does exporting all properties include every activity and file?
Do not assume so. Export routes have different scopes. Check the current vendor documentation and account settings, define the required activities and file versions, and validate those outputs separately.
Is a CRM export a backup?
An export can be part of a backup process. Its usefulness for recovery depends on coverage, readable file contents, definitions, and a proven way to reconstruct the required system. A downloaded CSV alone does not demonstrate recoverability.
Should export validation cover every record?
Use full-population ID, header, relationship, and manifest comparisons where practical. Add risk-based samples for field meaning, file readability, and business workflows. Sampling only a few contacts cannot establish that an entire export is present.
Next steps
Turn the export contract into a vendor trial task. HubSpot vs Salesforce is useful when deciding between a simpler shared customer platform and a CRM built for more complex governance. Pipedrive vs HubSpot helps teams weighing focused pipeline management against broader marketing and service requirements.
Use those comparisons to narrow the shortlist, then test the export that your actual operating model requires. Keep the old system available until the accepted package and destination rehearsal support the retirement decision.


