Integration Guide
Connect your CRM and revenue stack so customer data, quotes, contracts, and billing metrics stay in sync without either system overwriting the other.
How Integration Works
Attio handles your CRM workflow: companies, people, deals, pipeline. MonetizeNow handles quoting, contracts, and revenue. Records link across both systems through ID-to-ID pairings, so each side always knows which record it's talking to.
Sync runs in one direction per data type. Customer data flows from Attio into MonetizeNow. Quote and Contract data flows from MonetizeNow back into Attio. Each system owns its data, and neither overwrites another.
CRM and billing need to stay separate in your revenue stack. When one overwrites another, you get duplicate records, phantom pipeline, and unreliable ARR. Clear ownership boundaries keep both systems trustworthy.
Object Mapping
Every Attio record maps to a MonetizeNow record through a stored ID pair. Once linked, all sync decisions reference that pairing.
Sync Direction
Six Things Worth Knowing
Prerequisites
You need admin access to both your Attio Workspace and MonetizeNow Tenant. You also need to create a dedicated integration user in MonetizeNow before connecting.
Connection Steps
Custom Attributes Created Automatically
On Attio Company
| Attribute | Purpose |
|---|---|
MonetizeNow Account ID | Links Company to MonetizeNow Account |
On Attio Deal
| Attribute | Purpose |
|---|---|
MN Opportunity ID | Links Deal to MonetizeNow Opportunity |
MN Primary Quote ID | Currently active Primary Quote |
MN Quote Type | New, Amendment, or Renewal |
MN Quote Status | Current Quote lifecycle status |
MN Quote ARR | Annual Recurring Revenue from Quote |
MN Quote MRR | Monthly Recurring Revenue from Quote |
MN Quote Incremental ARR | ARR change (Amendment/Renewal) |
MN Quote Incremental MRR | MRR change (Amendment/Renewal) |
MN Quote Discount Amount | Applied discount value |
MN Quote Amount Without Discount | Pre-discount total |
MN Contract ID | Contract identifier once processed |
MN Contract Status | Contract lifecycle status |
MN Contract Start Date | Contract term start |
MN Contract End Date | Contract term end |
MN Contract End Action | What happens at expiry |
MN Previous Contract ID | For Renewal context |
Deal Stage Mapping
Map MonetizeNow Quote statuses to Attio Deal stages so that when a Quote transitions (Draft → Pending → Accepted), Attio Deal stage updates automatically.
Navigate to Settings → CRM → Attio in MonetizeNow to configure mapping. Each Quote status maps to one Deal stage. Multiple statuses can map to one stage. If no mapping exists for a status, Deal stage stays unchanged.
Init Deal: Create a Quote from Attio
Init Deal validates Deal context, resolves or creates all necessary commercial records (Account, Contacts, Opportunity), and hands you a pre-filled Draft Quote. One click from Attio, full commercial context ready in MonetizeNow.
Every step checks for existing associations first. If an Account already exists for that Attio Company, it reuses it. If not, it creates one. Same for Contacts and Opportunity. Safe to run multiple times without creating duplicates.
Orchestration Flow
Steps for Reps
List Quotes from a Deal
From app panel on any Attio Deal, click "List Quotes" to see all Quotes associated with that Opportunity. Each entry shows status, type, and a direct link.
View Contract from a Deal
Once a Quote is processed and a Contract exists, click "View Contract" from Deal panel. Opens Contract record showing status, term dates, and subscription details.
List Contracts from a Company
From any Attio Company, app panel shows all Contracts associated with that Account. Gives account managers a complete view of active, expired, and pending Contracts without switching platforms.
Amendment and Renewal Behavior
When an Amendment or Renewal Quote becomes Primary and is processed, a new Attio Deal is created, preserving original Deal history intact.
Deal name follows pattern: "Amendment - \[description]" or "Renewal - \[description]", linked to same Opportunity.
Attio → MonetizeNow
Attio is source of truth for customer and contact data. Changes propagate to MonetizeNow through validated webhooks. Updates are selective: they modify specific fields without overwriting MonetizeNow-specific values.
Company → Account
| Attio Field | MonetizeNow Account Field | Behavior |
|---|---|---|
| Name | Account Name | Updated on change |
| Primary Location | Billing Address + Shipping Address | Updated on change |
| Deal Currency | Default Currency | Set during Init Deal |
Person → Contact
| Attio Field | MonetizeNow Contact Field | Behavior |
|---|---|---|
| Name | Full Name | Updated on change |
| Email Address | Prefers existing match | |
| Phone Number | Phone | Prefers existing match |
| Primary Location | Address | Updated on change |
| Job Title | Title | Updated on change |
Delete Behavior
When Attio Company or Person is deleted, corresponding record is deactivated and association marked as disassociated. Records are never hard-deleted from billing.
MonetizeNow → Attio
Quote and Contract data flows into Attio Deal attributes. CRM users see commercial progress without switching platforms.
Quote Sync Eligibility
A Quote syncs to an Attio Deal only if all three conditions are met:
2. Quote must be Primary Quote on that Opportunity.
3. Quote must not be a migrated Quote.
If any condition fails, Quote is silently skipped. No error, no partial sync.
Quote → Deal Field Mapping
| MonetizeNow Record | Field | Attio Deal Attribute |
|---|---|---|
| Quote | ID | MN Primary Quote ID |
| Quote | Description | Deal Name |
| Quote | Type | MN Quote Type |
| Quote | Status | MN Quote Status |
| Quote | Status | Deal Stage (if mapped) |
| Quote | ARR | MN Quote ARR |
| Quote | MRR | MN Quote MRR |
| Quote | Incremental ARR | MN Quote Incremental ARR |
| Quote | Incremental MRR | MN Quote Incremental MRR |
| Quote | Amount | Value |
| Quote | Discount Amount | MN Quote Discount Amount |
| Quote | Amount Without Discount | MN Quote Amount Without Discount |
Contract → Deal Field Mapping
These fields sync when a Quote is processed and a Contract is created:
| MonetizeNow Field | Attio Deal Attribute |
|---|---|
| Contract ID | MN Contract ID |
| Contract Status | MN Contract Status |
| Start Date | MN Contract Start Date |
| End Date | MN Contract End Date |
| End Action | MN Contract End Action |
| Previous Contract ID | MN Previous Contract ID (Renewals) |
What Doesn't Sync (and Why)
These are intentional boundaries. Each one prevents a specific class of data integrity problem.
| What | Direction | Why |
|---|---|---|
| Account/Contact edits | MN → Attio | Attio is customer data source of truth |
| Non-primary Quotes | MN → Attio | Keeps CRM focused on commercially active Quote |
| Migrated Quotes | MN → Attio | Historical imports should not trigger CRM activity |
| Deal edits | Attio → MN Opportunity | Opportunity state is managed by MonetizeNow Quote lifecycle |
| Deal stage changes | Attio → MN Quote Status | Stage mapping is one-directional (MN → Attio only) |
| Line items | Either | Product-level detail lives in MonetizeNow Quotes only |
| Invoices and payments | Either | Billing data stays in billing system |
| Quote deletion events | Either | Not implemented. Quotes persist. |
Debugging Checklist
When sync behaves unexpectedly, work through these in order. Most issues resolve at steps 1 through 3.
- Does association exist? Check if Attio record is linked to a MonetizeNow entity. No association = no sync.
- Is association active? Disassociated or inactive links are skipped.
- Is Quote eligible? Must be Primary, linked to an Opportunity, and not migrated.
- Correct sync direction? Attio → MN for customer data. MN → Attio for Quotes/Contracts. Not reversible.
- Did webhook fire? Only
record.updatedandrecord.deletedevents are processed. - Required attributes present? Missing custom attributes on Attio side can block updates.
- Init Deal or manual flow? Some behaviors only apply during Init Deal orchestration.
Common Issues
Quote didn't sync to Attio Deal▾
Company update in Attio didn't reach MonetizeNow▾
MonetizeNow Account ID attribute populatedPerson created multiple Contacts in MonetizeNow▾
Deal wasn't created for an Amendment or Renewal▾
Deal stage didn't update when Quote status changed▾
Contract data only appears after Quote processing▾
Deleted Attio record but MonetizeNow record still exists▾
Init Deal failed with a validation error▾
Skipped vs. Failed
A skipped sync means MonetizeNow couldn't identify a valid target and held off rather than write to an unverified record. Typically points to a missing association or ineligible Quote.
A failed sync means something structurally blocked action: conflicting association, missing required data, or inaccessible records. Failures are enforced by design.
Updated 4 months ago