• Use Cases
  • Pricing
  • Security
  • Docs
Sign InStart free

The outbound integration layer for SaaS products: emit once, then let Meshes handle routing, retries, fan-out, and delivery history.

© Copyright 2026 Meshes, Inc. All Rights Reserved.

About
  • About
  • Security
  • Blog
  • Contact
  • FAQ
Product
  • Pricing
  • Demo
  • Integrations
  • Guides
  • Changelog
  • Status
Compare
  • All comparisons
  • Build vs buy
  • vs Zapier
  • vs Make
  • vs n8n
  • vs Paragon
  • vs Merge
Use Cases
  • All use cases
  • Payment failed
  • User signup fan-out
  • Churn prevention
  • Trial expired events
  • Lesson completion flows
  • Page completion triggers
  • Page visit Intercom flows
Developers
  • Documentation
  • Agents
  • API Reference
  • MCP Server
  • llms.txt
Legal
  • Terms of Service
  • Privacy Policy
  • Acceptable Use Policy
  • Cookie Policy

WorkflowRevenue operations guide

Update Salesforce When Users Change Plans

Use Meshes to route plan.upgraded and plan.downgraded into Salesforce so account teams, lifecycle owners, and revenue operations can react from the CRM instead of discovering changes later in billing exports.

Start freeView documentation

Event signal:plan.upgradedplan.downgraded| Destination:Salesforce| Use case:Churn Prevention Event Routing| Typical setup:~15 minutes

Workflow outcome

The product event is small. The downstream effect is not.

The workflow starts when a plan changes in your product and ends with Salesforce reflecting the current plan state and revenue context the account team needs.

The practical outcome is simple: the moment a user changes plans, Salesforce reflects it quickly enough for downstream workflow logic, handoffs, or prioritization to react.

Why teams care

This is the kind of workflow buyers judge fast

Plan changes are some of the clearest expansion or contraction signals in a SaaS product, but they often stay trapped inside billing systems until a later sync catches up.

If Salesforce is the system the team actually works from, waiting for exports or one-off sync jobs means the best follow-up window is already slipping away.

The technical trap is treating plan changes like a reporting problem. They are really delivery problems across systems, with retries, field selection, and auditability all needing to hold up when the signal matters.

What it depends on

The supporting pieces behind a credible rollout

These pages stay focused on the workflow outcome, but the setup still needs the right workspace, destination connection, and event path underneath.

Meshes workspace

You need a workspace and publishable key so your product can emit plan change events.

Read more

Salesforce connection

Authorize Salesforce in Meshes and confirm the connected user can update the contact fields you want to use.

Read more

A clear CRM field choice

Decide which Salesforce contact field or fields should represent current plan state, upgrade, or downgrade context.

Plan change event path

Your application should emit plan.upgraded or plan.downgraded with the revenue context the CRM needs.

Read more

The source event

The payload that creates the downstream business outcome

For Salesforce, the important part is not sending every billing detail. It is projecting the plan-change context into the contact fields your team actually uses to drive follow-up or reporting.

Event payload

plan.upgradedplan.downgraded
{
  "customer_id": "cus_5501",
  "email": "sam@bluebird.app",
  "old_plan": "starter",
  "new_plan": "growth",
  "effective_at": "2026-03-21T14:18:00Z",
  "mrr_delta": 150
}

What matters most

  • email

    Used to identify the Salesforce contact that should receive the update.

  • old_plan

    Provides the before-state so account teams can see what changed.

  • new_plan

    Defines the current plan state the Salesforce record should reflect.

  • effective_at

    Adds timing context when teams need to know exactly when the plan changed.

  • mrr_delta

    Useful for flagging whether the event represents expansion or downgrade impact.

Field mapping view

What the destination needs from the event

Event fieldDestination targetWhy it matters
emailSalesforce Contact emailActs as the lookup key for the contact that should be updated.
new_planCurrent plan fieldReflects the latest plan state for the account inside Salesforce.
old_planPrevious plan fieldHelps CS or RevOps see which direction the change moved.
mrr_deltaExpansion or downgrade indicatorUseful when the CRM workflow needs to distinguish growth from risk.
effective_atPlan change timestamp fieldAdds the timeline context the follow-up team often needs.

The destination connection

The destination matters, but the connection quality matters just as much

In your Meshes workspace, create the Salesforce connection that should receive plan.upgraded and plan.downgraded. Before you build the rules, confirm the connected user can update the fields that reflect current plan state and revenue movement.

  • Authorize the Salesforce account that owns the destination contact fields.
  • Confirm the connected user can read and update the fields your rule will target.
  • Name the connection after the Salesforce org or environment so the rule is easy to audit later.
  • Decide whether upgrades and downgrades should use separate rules, separate event types, or separate target values in the CRM.
Salesforce IntegrationMeshes quickstart

Where Meshes matters

The product stays simple while the destination still gets the right shape

Most teams do not need another destination. They need the destination to stay in sync without embedding its delivery quirks, retries, and mapping logic into the product code path.

Event

plan.upgradedplan.downgraded

Destination

Salesforce

Use case

Churn Prevention Event Routing

Docs

Salesforce Integration

In Meshes, create one or more Salesforce Update Property rules keyed off plan.upgraded and plan.downgraded, using email as the contact identifier and mapping the plan-change context into the fields your CRM workflow already expects.

  • Keep the Salesforce projection focused on the fields your account teams actually read or automate against.
  • If upgrades and downgrades need different outcomes, use separate rules or event types instead of trying to bury the distinction in comments.
  • Treat the billing system as the source of truth and Salesforce as the operational view that needs the signal quickly.
  • Let Meshes own the destination delivery so the billing event does not become another CRM-specific branch in your codebase.

A sample event

The product-side code stays close to the business event

This is the part teams like: the source event stays readable and product-shaped while Meshes owns the destination-facing complexity.

TypeScript example

One emit call stays close to the business event

import MeshesEventsClient from '@mesheshq/events';

const events = new MeshesEventsClient(process.env.WORKSPACE_PUBLISHABLE_KEY!);

await events.emit({
  event: 'plan.upgraded',
  payload: {
    customer_id: 'cus_5501',
    email: 'sam@bluebird.app',
    old_plan: 'starter',
    new_plan: 'growth',
    effective_at: '2026-03-21T14:18:00Z',
    mrr_delta: 150,
  },
});

Destination outcome

Use Send Test Event in Meshes or send either a plan.upgraded or plan.downgraded event, then confirm the Salesforce contact updates the fields your CS or RevOps workflow uses.

Send EventsSDK docs

Operational visibility

Delivery history is where this stops feeling like glue code

The difference between a nice demo and a usable product workflow is whether you can see what happened when the destination is slow, misconfigured, or unavailable.

In Meshes

What a healthy workflow looks like

  • Check the event record in Meshes and confirm the Salesforce rule was matched.
  • Inspect the rule execution details for a successful update_property attempt.
  • Open the Salesforce contact and verify the selected current-plan or lifecycle fields changed as expected.
  • If the write fails, use the Meshes event history to catch permission, field-value, or auth issues before later plan changes are lost.

Why teams buy Meshes

The workflow stays sellable after launch

  • Retries keep a transient Salesforce outage from turning a revenue event into a silent CRM miss.
  • Replay gives you a clean way to resend a missed upgrade or downgrade after fixing credentials or field issues.
  • Delivery history makes it clear whether the plan-change signal reached Salesforce when the billing event happened.

What's next

Keep exploring the same workflow from different angles

Use Case

Churn Prevention Event Routing

See another lifecycle signal pushed into Salesforce for customer success and revenue follow-up.

Open link

Integration

Salesforce Integration

Review the Salesforce connection flow, supported actions, and contact-matching behavior.

Open link

Docs

Integrations & Rules

Use the Meshes rule model and mappings docs to keep the Salesforce projection explicit.

Open link

Compare

Meshes vs. DIY

Compare routed CRM updates with maintaining plan-change sync workers and retries yourself.

Open link

Guide

Send Payment Failure Alerts to Slack

See the adjacent revenue-alert workflow where the same billing layer feeds Slack instead of Salesforce.

Open link

Guide

Tag Intercom Users When Trials Are About to Expire

See another conversion-window workflow where delivery timing matters as much as the destination update itself.

Open link

Next stepStart free or keep reading the docs

Make plan changes visible in Salesforce while the signal is fresh

Emit the plan-change event once and let Meshes handle the Salesforce delivery path, retries, and audit trail.

Start freeView documentation