> ## Documentation Index
> Fetch the complete documentation index at: https://docs.qwoty.io/llms.txt
> Use this file to discover all available pages before exploring further.

# CRM mapping

> Sync custom fields between Qwoty and your connected CRM with Bidirectional, CRM → Qwoty, or Qwoty → CRM.

If you've connected Qwoty to a CRM (HubSpot, Salesforce, Pipedrive), every custom field on a manageable object can be mapped to a CRM field. Mapping decides which direction data flows and which CRM field receives or sends the value.

<Note>
  CRM mapping requires an active CRM integration. Connect your CRM first via **Settings → Developers → Integration → CRM name**, then return to map custom fields.
</Note>

## Where mapping lives

Custom field mapping is configured per-CRM, in the integration settings:

<Steps>
  <Step title="Open Settings">
    Click **Settings** in the left sidebar.
  </Step>

  <Step title="Navigate to your CRM">
    Under the **Developers** section, click **Integration**, then click your connected CRM (HubSpot, Salesforce, Pipedrive, or others).
  </Step>

  <Step title="Find the Custom fields section">
    Scroll to the custom fields mapping area. Each Qwoty custom field on the synced object is listed, prefixed with `Custom:` to distinguish from system fields.
  </Step>
</Steps>

## Sync directions

For each custom field, you choose one of three sync directions:

| Direction           | What it does                                                        | Use it when                                                                                 |
| ------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| **Bidirectional** ↔ | Changes in either system propagate to the other                     | The field is owned by both systems and your team edits it in either                         |
| **CRM → Qwoty**     | Qwoty receives updates from the CRM, but never sends back           | The CRM is the source of truth (e.g., customer industry from HubSpot)                       |
| **Qwoty → CRM**     | Qwoty pushes updates to the CRM, but ignores changes coming from it | Qwoty is the source of truth (e.g., quote-driven event dates that should appear in the CRM) |

<Tip>
  When in doubt, start with **CRM → Qwoty** (one-way pull). It's the safest setting because Qwoty never overwrites CRM data. Move to Bidirectional only when your team wants to edit the value in both apps without thinking about it.
</Tip>

## Selecting the CRM field

Each custom field row has two dropdowns:

* **Direction dropdown** — pick `Bidirectional`, `CRM → Qwoty`, or `Qwoty → CRM`
* **Select CRM field** — pick the matching field on the CRM side (only fields of compatible types are listed)

Compatible types follow these rules:

| Qwoty type | Compatible CRM types                                      |
| ---------- | --------------------------------------------------------- |
| **Text**   | Single-line text, multi-line text, picklist, dropdown     |
| **Number** | Number, integer, decimal, currency (numeric portion only) |
| **Date**   | Date, date-time                                           |

<Warning>
  If the dropdown is empty or doesn't show the field you expect, check that the CRM field exists, that its type is compatible, and that the integration's permissions include read/write access to the field.
</Warning>

## Sync frequency and timing

How often Qwoty syncs depends on the integration:

* **Real-time webhooks** for most modern CRMs (HubSpot, Salesforce) — changes propagate within seconds
* **Periodic polling** as a fallback when webhooks aren't available or fail

After saving a mapping, the next sync cycle picks up the new configuration. Existing records start receiving (or sending) values according to the new direction at the next sync.

## When the CRM field is missing values

If a CRM record doesn't have a value for the mapped field, Qwoty receives `null` and stores nothing — the custom field shows empty on the record. The reverse is also true: if Qwoty has no value and the direction includes `→ CRM`, the CRM field is set to its empty state.

## Save changes

Click **Save changes** at the bottom of the mapping section to apply your configuration. The new mappings are picked up at the next sync. You can adjust mappings any time without breaking historical data — past values stay intact.

## Common mapping patterns

| Custom field                    | Direction         | Why                                                                  |
| ------------------------------- | ----------------- | -------------------------------------------------------------------- |
| Customer's industry             | **CRM → Qwoty**   | Sales reps maintain the source of truth in the CRM                   |
| Event date (Quote custom field) | **Qwoty → CRM**   | Set during quoting, exposed to CRM for reporting                     |
| Account manager                 | **Bidirectional** | Either app can update the assignment, both should reflect the change |
| Internal sales notes            | (no mapping)      | Stays in Qwoty only — not synced                                     |

<Info>
  Not every custom field needs a mapping. Leave the **Select CRM field** dropdown empty to keep the field local to Qwoty.
</Info>

## Related

<CardGroup cols={2}>
  <Card title="Field properties" icon="sliders" href="/user-guide/data-model/reference/field-properties">
    Mandatory, Editable, Display — properties that work alongside CRM mapping.
  </Card>

  <Card title="Field types" icon="font" href="/user-guide/data-model/reference/field-types">
    Type compatibility between Qwoty and CRM fields.
  </Card>

  <Card title="CRM integration" icon="plug" href="/user-guide/settings/integrations/crm">
    Connect HubSpot, Salesforce, or Pipedrive.
  </Card>

  <Card title="Create a Customer custom field" icon="users" href="/user-guide/data-model/how-tos/create-customer-custom-field">
    The most common case for CRM-synced custom fields.
  </Card>
</CardGroup>
