> For the complete documentation index, see [llms.txt](https://docs.spara.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.spara.com/guides/integration-guides/crm-sync-workarounds.md).

# Working Around CRM Sync Limitations

Practical patterns for working around the limits of Spara's native CRM integration.

Spara's native CRM integration is intentionally opinionated: it syncs Lead and Contact records automatically, reads Account, Owner, and Deal data, and pushes every update as it happens. That covers most teams out of the box, but some CRM setups need more. This guide covers the most common gaps and the recommended workaround for each.

{% hint style="info" %}
Several workarounds below involve custom configuration by Spara's engineering team, available for Enterprise customers. Contact your Spara customer success representative to scope them.
{% endhint %}

## Spara's data model in brief

Spara organizes buyer data into a small set of objects, and the sync's boundaries follow the object model:

* **Lead**: a single person. The only object Spara writes to your CRM.
* **Account**: a company. Read from your CRM, never written.
* **Owner**: the rep responsible for a record. Read from your CRM, never written.
* **Deal**: a sales opportunity. Read nightly for analytics, never written.
* **Event**: a lead interaction (chat, call, email, meeting). Stored in Spara; not yet available for CRM sync.

For the full picture of each object and how they relate, see [Developer: Spara Objects & Fields](https://docs.spara.com/developers/data-model). For what each integration reads and writes, see [Salesforce](https://docs.spara.com/integrations/crm-integrations/salesforce) and [Hubspot (CRM)](https://docs.spara.com/integrations/crm-integrations/hubspot-crm).

## Use data from CRM objects Spara doesn't support

**The gap:** Spara models Leads, Accounts, Owners, and read-only Deals. If the data you need lives on another CRM object, such as a custom object, a Campaign, or an Opportunity field you want in workflow logic, the native integration won't sync it directly.

**The workaround:** Spara's engineering team can map fields from unsupported CRM objects onto Spara's core objects. Rather than extending Spara's data model to mirror your CRM, the relevant fields are flattened onto the Lead, Account, or Owner where your workflows and agents can use them.

For example, suppose you want workflows to run only for leads attached to an active deal:

1. Your Salesforce `Opportunity.StageName` field is mapped to a custom Spara Lead field, e.g. `deal_stage`.
2. Spara keeps `deal_stage` up to date as your CRM changes.
3. Your workflows trigger and branch on `deal_stage` like any other field. See [Building Your First Workflow](/guides/platform-guides/building-your-first-workflow.md).

The design work is defining the mapping: which object, which fields, and how they roll up to a single lead. Your Spara team will work through that with you. This is available for Enterprise customers.

## Require fields before a CRM record is created

**The gap:** By default, Spara creates a CRM record as soon as it captures an email address, before a name or company may be known. Salesforce requires a last name (and company, for Leads) on every record, so Spara fills missing required fields with the placeholder `UNKNOWN` and updates them as real values arrive. Some teams don't want partial records in their CRM at all.

**The workaround:** Spara's engineering team can configure a creation gate for your instance, for example "only create a Salesforce Lead once email, first name, last name, and company are all known." This is available for Enterprise customers.

If you want to avoid Spara-created records entirely, set the sync mode to **Update only** in your Push Rules. Spara will enrich records your team creates, but never create its own.

## Keep Spara from overwriting CRM data

**The gap:** Spara pushes every field update by default, and new field mappings default to "Overwrite existing value," which can clobber values your reps maintain by hand.

**The workaround:** Use the controls already in your integration settings:

* Set individual field mappings to **Update if field is empty**. Spara fills gaps but never replaces an existing value.
* Set the sync mode to **Update only** to stop Spara from creating records.
* Set the sync mode to **Off** for a record type you don't want Spara touching at all.

## Write to Accounts, Opportunities, or other objects

**The gap:** Spara only writes to Lead and Contact records. It cannot update a CRM Account when it learns firmographics, or write deal context back to an Opportunity.

**The workaround:** Route the data through your own automation instead of the native sync:

* **Webhooks**: Spara fires a webhook whenever lead fields change, with the full field payload. Point it at your middleware (Zapier, Workato, a serverless function) and write to any CRM object your automation can reach. See [Developer: Webhooks](https://docs.spara.com/developers/spara-api/webhooks).
* **API workflow step**: a Spara workflow can call any external endpoint at a specific moment (e.g., after a meeting is booked), sending lead fields in the request. See [API Step](https://docs.spara.com/agents/workflows/steps/api).
* **Web API**: pull lead data from Spara on your own schedule and reconcile it into your CRM however you like. See [Developer: Web API](https://docs.spara.com/developers/spara-api/web-api).

## Log Spara activity in your CRM

**The gap:** Spara records every interaction (messages, calls, emails, meetings) as Events in the Spara platform, but Events don't yet sync to the CRM as structured activity records like Salesforce Tasks or HubSpot activities.

**The workaround:** Get conversation activity into your CRM through the supported channels:

* **Map the Conversation field.** In Data Model Sync, map the **Conversation** Spara field to a long-text field on your Lead or Contact. Spara keeps the full transcript up to date there.
* **Salesforce Task logging.** Spara can log each conversation as a Salesforce Task attached to the Lead or Contact and assigned to its owner. Ask your Spara team to enable this.
* **Email activity.** Emails Spara exchanges with a lead are logged automatically, as native email records in Salesforce and email engagements in HubSpot.
* **Event-level records.** If you need individual events (meeting booked, call completed) as CRM activities today, use [Developer: Webhooks](https://docs.spara.com/developers/spara-api/webhooks) to receive them in real time and create the activity records with your own automation.

## Control which CRM records enter Spara

**The gap:** Pull Rules, which decide which CRM records are imported into Spara as Leads, are not self-serve.

**The workaround:** Your Spara customer success representative configures Pull Rules with you. They can filter on any Lead or Contact field in your CRM (lead source, region, lifecycle stage, and so on), so give your Spara team the segment definition and they'll set it up.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.spara.com/guides/integration-guides/crm-sync-workarounds.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
