# monday.com Salesforce integration

*monday.com → Salesforce*

**In short:** A monday.com to Salesforce integration keeps your operational boards and your CRM system of record in agreement: a closed-won Opportunity in Salesforce spins up the delivery or onboarding item on the right monday.com board, and status, owner, and date changes flow back so account teams see live progress without leaving Salesforce. Done properly it is not a Zap firing on every change - it is an idempotent pipeline that matches records by stable external IDs, maps monday status labels to Salesforce picklists, respects governor limits and validation rules, and prevents the echo loops two-way syncs are notorious for.

## What a monday.com to Salesforce integration actually does

Salesforce is where the deal lives: the Account, the Opportunity, the forecast, the close date the account executive is measured on. monday.com is where the work happens after that: the onboarding checklist, the delivery board, the implementation timeline the project team actually looks at every morning. The two describe the same customer from different ends, and without a link between them somebody spends their week copying fields from one into the other.

A monday.com to Salesforce integration closes that gap. When an Opportunity moves to closed-won in Salesforce, the pipeline creates the delivery or onboarding item on the correct monday.com board, pre-filled with the account name, contract value, owner, and key dates. As the delivery team works the board - moving a status, setting a go-live date, assigning an owner - those changes flow back to the Salesforce record so the account team sees live progress without opening monday.com at all. Nobody re-keys anything, and the two systems stop disagreeing about where a customer stands.

## What data moves

| monday.com object / event | Becomes in Salesforce | Notes |
| --- | --- | --- |
| Closed-won Opportunity (inbound) | New board item + subitems | Salesforce is the trigger; the board item is created with the account and deal context |
| Item status column change | Opportunity / custom stage field update | monday status labels mapped to Salesforce picklist API names |
| Item owner (people column) | Record Owner or a lookup field | Matched via a user mapping table, not raw display names |
| Date / timeline column | Close date, go-live, or custom date field | Timezone-normalised so both sides agree on the day |
| Numbers / formula column | Currency or number field | Formula and mirror columns are read-only on monday - synced out only |
| Update / note (activity) | Task or Chatter post on the record | Optional; keeps the account team's context in one place |
| New Contact captured on a board | Contact linked to the Account | Deduplicated against existing Salesforce Contacts before insert |

The exact columns, picklist mappings, and which side wins on a conflict are agreed once during scoping and encoded in the pipeline. After that, no one maintains the mapping by hand.

## The details that break naive syncs

A no-code recipe or the native app gets a happy-path demo working in an afternoon and then leaks in production:

- **There is no shared ID.** monday.com item ids and Salesforce 18-character record Ids are unrelated. Match on names or emails and the first rename or duplicate forks the record. The pipeline stores each system's id in the other and matches on that, permanently.
- **Status labels are not picklist values.** A monday status column shows "In Progress"; Salesforce stores a picklist API name that may be `In_Progress` or a restricted value the field will reject. Every label needs an explicit, validated mapping, and a new label added on the board has to fail loudly rather than write garbage.
- **Echo loops.** Two-way sync means a change you write to Salesforce can bounce back as a Salesforce change event, which re-writes monday, which fires another webhook. Without loop suppression - tracking the origin of each change and ignoring your own writes - the two systems ping-pong forever. This is the single most common way naive two-way syncs melt down.
- **Governor limits and API budgets.** Salesforce enforces governor limits and per-window API caps; monday.com meters GraphQL by query complexity per minute. A backfill or a busy morning that ignores both will start getting throttled or rejected mid-batch. The pipeline batches, paces, and uses the Bulk API where it belongs.
- **Validation rules and required fields.** Salesforce will refuse a write that violates a validation rule, a required field, or a duplicate rule. That rejection has to be caught and surfaced, not swallowed - otherwise the board says done and the CRM never heard about it.
- **Read-only columns.** Mirror and formula columns on monday cannot be written to. The mapping has to know which columns are sources and which are derived, or writes fail silently.
- **Idempotency.** Replay a webhook or re-run a backfill and a naive sync creates the item twice. Every event carries a stable key so a retry updates the existing record instead of duplicating it.

## How we build and run it

We treat this as a pipeline, not a bundle of recipes. Events from monday.com webhooks and from Salesforce Change Data Capture (or a scheduled SystemModstamp delta) are validated, matched against the stored cross-system ids, transformed through your agreed field and picklist mappings, and written to the other side through the appropriate API - the Salesforce Bulk API for volume, the GraphQL API for monday, each within its rate budget.

The pipeline is idempotent and loop-safe: every change carries a stable identifier and an origin marker, so a retry never duplicates a record and a write we made never bounces back to re-trigger itself. It runs on cloud-native, fully EU-hosted AWS infrastructure, so customer and deal data never leaves the EU - which keeps your DPA / AVV and GDPR obligations clean.

And then we keep it running. Monitoring, alerting, incident response, and - critically - watching for monday.com GraphQL and Salesforce API changes are our responsibility under contract. When Salesforce retires an API version or you add a validation rule that starts bouncing writes, we catch it in the dead-letter queue and fix it, before it becomes a board and a CRM quietly telling two different stories. You get a named owner and an SLA, not an automation someone has to babysit.

## When this integration is worth building

If one person moves a handful of deals a month from Salesforce onto a board by hand, that is genuinely fine and we will tell you so. The integration earns its place when the volume of closed-won handoffs makes manual copying a standing chore, when both teams need to trust the same status without cross-checking two tools, when a two-way sync has already bitten you with echo loops or drifted records, or when a no-code automation keeps breaking on Salesforce validation rules and API limits that a properly built pipeline handles as a matter of course.

## Frequently asked questions

### Can't I just use Zapier or the native monday.com Salesforce app for this?

For a one-directional trigger - create a Salesforce Lead when someone fills a form on a board - a no-code tool is genuinely fine. It starts to hurt once the sync is two-way, because you need to prevent echo loops, match records without a shared key, map status labels to picklist API names, and handle Salesforce validation rules that silently reject writes. Those are the parts point tools leave you to firefight. A managed pipeline puts that logic in one place and owns the failure modes.

### How do the two systems match records if they have no shared ID?

They don't share one out of the box, so we create one. Each synced monday.com item stores the 18-character Salesforce record Id in a dedicated column, and each Salesforce record stores the monday item id in an External Id field. The pipeline matches on those, not on names or emails, which means renames and duplicates never cause a record to fork or overwrite the wrong counterpart.

### Does it sync in real time or on a schedule?

Both, depending on the direction and what your teams need. monday.com emits per-board webhooks on item and column changes, so board-to-Salesforce updates can be near real time. Salesforce-to-monday can run on Change Data Capture or a scheduled delta poll on SystemModstamp. We pick per direction based on volume and how fresh each side genuinely needs to be, rather than hammering both APIs continuously.

### What happens when a Salesforce validation rule or required field rejects a write?

The pipeline treats it as a real error, not a lost update. The event is retried, and if it still fails it lands in a dead-letter queue with the full Salesforce error, so a required field, a restricted picklist value, or a duplicate rule surfaces as an alert we act on - not as a board and a CRM that have silently drifted apart. Nothing is dropped.

### Who operates it once it is live?

We do. The pipeline runs on cloud-native, fully EU-hosted infrastructure that we monitor. When monday.com changes its GraphQL API or Salesforce retires a REST version or you add a validation rule, that is our problem to catch and fix under contract. You get a named owner, alerting, and an SLA instead of an automation nobody remembers building.

## Related integrations

- [Airtable ↔ Salesforce](https://seamless.engineering/integrations/airtable-salesforce/): Airtable Salesforce integration
- [monday.com ↔ SAP](https://seamless.engineering/integrations/monday-sap/): monday.com SAP integration
- [Salesforce ↔ Slack](https://seamless.engineering/integrations/salesforce-slack/): Salesforce Slack integration
- [Dynamics 365 ↔ Salesforce](https://seamless.engineering/integrations/dynamics-365-salesforce/): Dynamics 365 Salesforce integration
- [HubSpot ↔ Salesforce](https://seamless.engineering/integrations/hubspot-salesforce/): HubSpot Salesforce integration
- [Intercom ↔ Salesforce](https://seamless.engineering/integrations/intercom-salesforce/): Intercom Salesforce integration

## Browse by system

- [All Salesforce integrations](https://seamless.engineering/integrations/salesforce/)
- [Salesforce API changelog](https://seamless.engineering/api-changelog/salesforce/): No breaking changes or deprecations in the last 90 days

## Request a scoping call

Need this integration built and permanently operated? Tell us which systems connect and what data has to move. Fixed-price scoping quote within 48 hours.

- Email: hello@seamless.engineering
- Contact form: https://seamless.engineering/#contact
