Order-to-Cash, Deep
The beachhead system you'll be hired to own first
The O2C lifecycle, stage by stage
After this you can walk the full quote-to-cash flow and the system that owns each stage.
Order-to-Cash is the named beachhead in this charter. The job description starts you on O2C before Record-to-Report, so you should be able to draw the whole flow from memory and say which system owns each stage and where the hand-offs leak.
Interactive diagram. Tab through its regions; each focused region shows its detail in the panel below.
Cash timing and revenue timing are different events.
O2C is the path a dollar travels from the moment a customer wants to buy to the moment the cash is reconciled in the bank and recognized in the books. At Cursor, where pricing is consumption-heavy, the metering and rating stages in the middle carry more weight than they do in a flat-subscription business.
Here is the canonical lifecycle. Walk it left to right when an interviewer hands you a whiteboard.
- 1Lead / opportunity (CRM). A prospect becomes a tracked deal in the CRM (Salesforce-class). Owns the commercial intent: who, how much, expected close.
- 2Quote / CPQ. Configure-price-quote turns intent into priced line items: products, tiers, discounts, ramps, commitments. This is where commercial terms first become structured data.
- 3Order / contract. The signed order is the legal commitment. It creates the contract and subscription records that everything downstream references.
- 4Provisioning & entitlement. The product grants access and writes entitlements - the seats, usage caps and feature flags the customer is allowed to consume.
- 5Usage metering. The product emits usage events (requests, tokens, compute) into a metering pipeline. For a consumption business this stage is the revenue engine.
- 6Rating / invoicing. Metered usage is priced against the contract and rolled into an invoice for the period: base fees, usage charges, overages, true-ups.
- 7Payment. The customer pays via card, ACH or wire through a payment processor.
- 8Cash application. The payment is matched to the invoice it settles, including partials and overpayments.
- 9Collections / dunning. Unpaid invoices trigger reminders, retries and escalation until they are paid or written off.
Two things flow through this pipe in opposite directions and saying so out loud is a fast way to show you think in systems.
- Flow
- Commitment & data
- Direction
- Left to right
- What moves
- Quote → order → entitlement → usage → invoice. Each stage enriches the record.
- Flow
- Money & settlement
- Direction
- Right to left, then booked
- What moves
- Cash lands at payment, gets applied back to the invoice, then settles into the ledger.
| Flow | Direction | What moves |
|---|---|---|
| Commitment & data | Left to right | Quote → order → entitlement → usage → invoice. Each stage enriches the record. |
| Money & settlement | Right to left, then booked | Cash lands at payment, gets applied back to the invoice, then settles into the ledger. |
Data and money flowing in opposite directions is the picture interviewers want to see you draw - entitlement pushes forward, settlement reaches back.
System of record per stagename the owner, not just the box
Every stage has one system that is authoritative and the integrations between owners are where defects and revenue leakage concentrate. A vague answer names boxes. A senior answer names the system of record and the hand-off contract between each pair.
- CRM (e.g. Salesforce)
- Lead, opportunity, account. Source of truth for the commercial relationship.
- CPQ
- Quote and the priced configuration. Often part of the CRM or a bolt-on.
- Billing / metering (e.g. Stripe, Metronome, Orb)
- Subscription, usage events, rating, invoice. The heart of a consumption business.
- Revenue subledger
- Performance obligations and recognized revenue under ASC 606The US revenue-recognition standard; cited as the canonical judgment-heavy accounting work to keep human-led rather than hand to an agent, because facts and circumstances vary deal to deal.. Sometimes a module, sometimes its own system.
- ERP / GL (e.g. NetSuite, Oracle, SAP)
- Journal entries, AR, cash, the general ledger. The book of record for finance.
Names vary by company. What does not vary: each stage has exactly one authoritative owner and you should be able to defend where you drew each boundary.
Bookings, billings, revenue, cash: four clocks, not onethe distinction juniors blur
These four numbers describe the same deal at different moments and they move on different timelines. Confusing them is the fastest way to lose credibility with a finance interviewer.
The contract is signed. The customer committed to spend.
Recognized at order, before any cash or service.
A forward-looking sales metric, not a GAAP number.
An invoice was issued for a period.
Driven by the billing schedule and, for usage, by actual consumption.
Creates accounts receivable, not revenue.
Earned as the performance obligation is satisfied.
For usage, recognized as the customer consumes - often after billing.
Governed by ASC 606The US revenue-recognition standard; cited as the canonical judgment-heavy accounting work to keep human-led rather than hand to an agent, because facts and circumstances vary deal to deal., not by when cash arrives.
The customer actually paid.
Lands after the invoice, sometimes weeks later.
Reduces AR; it is the only number you can spend.
When you draw the lifecycle, annotate two arrows in opposite directions and label one stage with all four numbers at once - for example an annual commitment that is fully booked, billed monthly, recognized on usage and collected on Net 30. Showing the same deal through four clocks proves you understand reconciliation, which is half the job.
Takeaway. O2C is a nine-stage pipe with one system of record per stage; bookings, billings, revenue and cash are four clocks on the same deal that must reconcile.
Self-check
The O2C data model
After this you can model the core entities and relationships an O2C system needs.
The data model is where the lifecycle becomes something you can build. Get the spine right - contract, subscription, entitlement, usage, invoice, payment - and modifications, true-ups and reconciliation fall out cleanly. Get it wrong and you will be patching one-off configuration for years.
Start with the contract as the spine. Everything downstream references it and it has to survive change without losing history.
Contract and subscription: versioned, never overwrittenthe spine
A subscription that gets upgraded mid-term, co-termed with another product or amended on price is not a single mutable row. It is a sequence of versions. You model line items as versioned so you can answer "what were the terms on March 14" for an auditor without reconstructing it from memory.
- account / customer
- The legal entity you bill. Anchors the whole graph.
- contract
- The signed commitment: term, total value, governing terms.
- subscription
- The recurring relationship under a contract; can hold multiple products.
- order line / subscription item
- Versioned line items - price, quantity, effective dates. Modifications append a version, they do not overwrite.
Entitlements: the gate between contract and productwhere the deal becomes enforceable
Entitlements translate the contract into what the product is allowed to grant: seats, usage caps, feature access, included credits. They are the join between commercial terms and runtime enforcement and they feed the overage logic. If the contract says "500K requests included, then $X per 1K," the entitlement is what the product and the rater both read.
Usage events: append-only, idempotent, replayablethe high-volume stream
Usage is the highest-volume table in a consumption business and the one most likely to corrupt revenue if you get it wrong. Three properties are non-negotiable.
Events are facts that happened.
Never update or delete; corrections are new compensating events.
Each event carries a stable unique id.
Re-ingesting the same event id is a no-op, so retries cannot double-bill.
You can re-run rating over a window from raw events.
Lets you recompute an invoice when a pricing bug is found.
-- raw usage: append-only, dedup on event_id CREATE TABLE usage_event ( event_id text PRIMARY KEY, -- idempotency key from the producer account_id text NOT NULL, meter text NOT NULL, -- e.g. 'requests', 'input_tokens' quantity numeric NOT NULL, occurred_at timestamptz NOT NULL, -- when it happened (for the usage period) received_at timestamptz NOT NULL, -- when we ingested it (for late-arrival) contract_id text NOT NULL ); -- a duplicate delivery is a no-op, not a double charge INSERT INTO usage_event (...) VALUES (...) ON CONFLICT (event_id) DO NOTHING;
Keep occurred_at and received_at as separate columns. The usage period is decided by when the event happened, but late-arrival handling and reconciliation depend on when you got it. Collapsing them into one timestamp is a classic mistake that makes period-close corrections impossible to reason about.
Invoices and cash applicationwhere money meets the ledger
Invoices and their line items link back to the order, the usage period and the revenue treatment so every charge is traceable. Cash application is the inverse: it links a payment to the invoice it settles. Real life is messier than one-payment-one-invoice.
- Cash scenario
- Partial payment
- What it means
- Customer pays part of an invoice
- How the model handles it
- Payment applied for less than invoice total; balance stays open.
- Cash scenario
- Overpayment
- What it means
- Customer pays more than owed
- How the model handles it
- Excess becomes unapplied cash or a credit on account.
- Cash scenario
- Lump payment, many invoices
- What it means
- One wire covers several invoices
- How the model handles it
- One payment, multiple applications, each linked to its invoice.
- Cash scenario
- Unapplied cash
- What it means
- Money arrived, can't be matched yet
- How the model handles it
- Parked in an unapplied bucket until matched; a controlled liability, not lost.
| Cash scenario | What it means | How the model handles it |
|---|---|---|
| Partial payment | Customer pays part of an invoice | Payment applied for less than invoice total; balance stays open. |
| Overpayment | Customer pays more than owed | Excess becomes unapplied cash or a credit on account. |
| Lump payment, many invoices | One wire covers several invoices | One payment, multiple applications, each linked to its invoice. |
| Unapplied cash | Money arrived, can't be matched yet | Parked in an unapplied bucket until matched; a controlled liability, not lost. |
Cash application is a many-to-many between payments and invoices. Model the application link as its own entity, not a foreign key.
Takeaway. Model the contract/subscription as a versioned spine, usage as an append-only idempotent stream and cash application as a many-to-many link between payments and invoices.
Self-check
QWhy should a usage_event table be append-only with a unique event_id, rather than mutable rows you update when corrections come in?
Consumption billing at AI-product scale
After this you can design metering-to-invoice for a usage-based AI business like Cursor.
Cursor's own pricing is consumption-heavy, which makes usage-based billing the single most relevant domain in this loop. If you can design the path from a raw token event to a correct invoice line - and defend the corrections after a period closes - you are speaking directly to the work.
The metering pipeline is the assembly line. Each step has a failure mode and the interviewer will probe the seams.
- 1Capture. The product emits a usage event per billable action - a request, input/output tokens, a compute-second - tagged with account, meter and a unique id.
- 2Deduplicate. Drop replays on the event id so retries and at-least-once delivery cannot inflate usage.
- 3Aggregate. Roll raw events into period totals per account and meter. High-volume streams get pre-aggregated to keep rating tractable.
- 4Rate. Apply the pricing model to the aggregate: tiers, included credits, overage rates, minimums. This produces the priced charge.
- 5Invoice. Assemble rated charges into invoice lines for the period and post them to billing.
Pricing constructs you must be able to modelthe vocabulary of consumption deals
Enterprise consumption contracts stack several of these at once. Know what each one means for the rater and the revenue treatment.
- Construct
- Per-unit
- How it bills
- Flat rate per unit consumed
- The subtlety
- Simplest to rate; rare alone at enterprise scale.
- Construct
- Tiered / volume
- How it bills
- Rate changes as volume crosses thresholds
- The subtlety
- Tiered prices each band separately; volume re-prices everything at the top band. Know which.
- Construct
- Prepaid credits / commitment
- How it bills
- Customer pre-buys a balance, draws it down
- The subtlety
- Cash up front, revenue on consumption. Unused balance is deferred revenue.
- Construct
- Overage
- How it bills
- Usage past the included amount bills extra
- The subtlety
- Requires the entitlement to define the included cap precisely.
- Construct
- True-up
- How it bills
- Periodic reconciliation to actual usage
- The subtlety
- Often lands after a period; collides with close.
- Construct
- Minimum / floor
- How it bills
- Customer pays at least a set amount
- The subtlety
- Bills the greater of usage and the floor; easy to mis-rate.
| Construct | How it bills | The subtlety |
|---|---|---|
| Per-unit | Flat rate per unit consumed | Simplest to rate; rare alone at enterprise scale. |
| Tiered / volume | Rate changes as volume crosses thresholds | Tiered prices each band separately; volume re-prices everything at the top band. Know which. |
| Prepaid credits / commitment | Customer pre-buys a balance, draws it down | Cash up front, revenue on consumption. Unused balance is deferred revenue. |
| Overage | Usage past the included amount bills extra | Requires the entitlement to define the included cap precisely. |
| True-up | Periodic reconciliation to actual usage | Often lands after a period; collides with close. |
| Minimum / floor | Customer pays at least a set amount | Bills the greater of usage and the floor; easy to mis-rate. |
Idempotency and late-arriving eventsthe corrections problem
Two failure modes cause most consumption-billing pain. Double-billing comes from re-ingesting the same event and you defend against it with the unique event id and dedup. Late-arriving events are subtler: a usage event with an occurred_at inside a period that arrives after you have already invoiced or closed that period.
You cannot rewrite a closed invoice. You issue a correction.
Late event still lands inside the open aggregate.
Rating picks it up; the invoice is simply correct.
No correction needed.
The invoice is immutable history.
Issue a credit memo or a true-up line on the next invoice.
Revenue catch-up is booked in the current period, not back-dated.
A dedicated metering/rating layer usually lives between the product and the ERP rather than inside either. The product should not carry pricing logic - pricing changes far more often than product code and must be auditable. The ERP should not ingest millions of raw token events - it wants summarized journal entries. The rater is the seam that turns a firehose of events into a few priced, traceable lines and keeping it separate is what lets each side change independently.
Reconciliation across the three views of usageraw vs rated vs invoiced
Usage exists in three forms and they must agree. Raw is what the product emitted, rated is what the pricing engine charged and invoiced is what actually hit the customer's bill. Drift between any two is revenue leakage or an overcharge and you want an automated job that alerts on it rather than discovering it in an audit.
- Raw usage
- Sum of deduped events for the period. Ground truth of what happened.
- Rated usage
- What the rater priced. Should equal raw minus anything intentionally excluded.
- Invoiced usage
- What landed on the invoice. Should equal rated for the period.
Run raw → rated → invoiced as a scheduled reconciliation with alerting on drift. A non-zero, unexplained delta at any step is the leak you were hired to catch.
"I'd dedup on a producer-supplied event id, aggregate per meter, then rate against the contract's tiers and entitlements. For late events I never rewrite a closed invoice - I issue a credit memo or true-up and book the catch-up in the current period. And I'd run a standing raw-to-rated-to-invoiced reconciliation that alerts on drift, because that delta is exactly where revenue leaks."
Takeaway. Metering goes capture → dedup → aggregate → rate → invoice; never rewrite a closed invoice - correct with a credit memo or true-up and reconcile raw vs rated vs invoiced with alerting.
Self-check
QA usage event with occurred_at inside March arrives on April 5, after you've already issued and the customer has paid the March invoice. How do you handle it correctly?
Integration & reliability patterns
After this you can make cross-system O2C integrations correct and auditable.
O2C is a distributed system that happens to move money. The hard part is not any single service, it is keeping billing, the payment processor, the revenue subledger and the GL consistent when the network is flaky and services retry. The patterns below are the ones a finance-systems engineer is expected to reach for by name.
Idempotency and exactly-once effectthe foundation under everything
Across the billing, payment and ERP boundaries you assume at-least-once delivery and make every operation safe to retry. An idempotency key on each request lets the receiver recognize a replay and return the original result instead of charging twice. You cannot get exactly-once delivery over a network, so you engineer exactly-once effect at the receiver.
# Same idempotency_key on a retry returns the original charge,
# it does not create a second one.
stripe.PaymentIntent.create(
amount=invoice.amount_due,
currency="usd",
customer=invoice.customer_id,
idempotency_key=f"invoice:{invoice.id}:attempt", # stable per invoice
)An idempotency key is only as good as its scope. Key on the business fact (this invoice) not the wall-clock attempt or a legitimate retry generates a new key and you double-charge. Naming this distinction unprompted is a strong senior signal.
Eventual consistency and reconciliation as the safety nettrust, then verify
Distributed financial state is eventually consistent: for a window, billing thinks one thing and the GL thinks another. Reconciliation jobs are how you make that safe. They re-derive each system's view from a common source and assert they match, so a missed webhook or a half-applied payment surfaces as an alert within hours instead of an audit finding months later.
Runs on a schedule (often nightly).
Compares two independent views: e.g. payments in the processor vs cash applied in the ERP.
Emits a signed delta and alerts when it's non-zero and unexplained.
Append-only record of every financial event.
Lets you trace any dollar from usage event to GL journal line.
The audit trail an auditor and SOXSarbanes-Oxley Act. A US law that forces companies to keep auditable controls over any system that affects their financial reporting. control both depend on.
Failure handling that preserves controlsDLQ, replay, manual correction
Events will fail to process. The question is whether a failure quietly drops a dollar or lands somewhere recoverable. In finance, manual correction is legitimate, but it must keep segregation of duties and leave evidence.
- Dead-letter queue. When an event exhausts its retries, route it to a DLQ for isolation and alerting - never drop it. A DLQ that is filling up is a P1 because it is unrecognized revenue or unapplied cash.
- Replay. Because raw events are append-only and idempotent, you can re-run processing over a window once the bug is fixed and the idempotency keys prevent the replay from double-counting.
- Manual-correction workflow. When a human must intervene, do it through a tracked workflow with maker-checker approval and an immutable record of who changed what and why - not a direct edit to a production table.
Choosing the integration style per hopwebhooks vs batch vs CDC
There is no single right transport. You pick per system based on latency needs, volume and what the source can emit.
- Style
- Webhooks / events
- Best for
- Low-latency reactions (payment succeeded, invoice finalized)
- The trade-off
- Must handle retries, dedup and missed deliveries; pair with a reconciliation sweep.
- Style
- Batch / scheduled
- Best for
- Bulk posting to the ERP, period rollups, GL journals
- The trade-off
- Simple and auditable, but stale between runs; fine when the SLA is hours.
- Style
- CDC (change data capture)
- Best for
- Streaming row-level changes from a source DB
- The trade-off
- Near-real-time and complete, but couples you to the source schema.
| Style | Best for | The trade-off |
|---|---|---|
| Webhooks / events | Low-latency reactions (payment succeeded, invoice finalized) | Must handle retries, dedup and missed deliveries; pair with a reconciliation sweep. |
| Batch / scheduled | Bulk posting to the ERP, period rollups, GL journals | Simple and auditable, but stale between runs; fine when the SLA is hours. |
| CDC (change data capture) | Streaming row-level changes from a source DB | Near-real-time and complete, but couples you to the source schema. |
A common pattern: webhooks for fast signals, a nightly batch for GL posting and reconciliation to catch whatever the webhooks missed.
When you propose a webhook integration, immediately add the reconciliation sweep that backstops it. Saying "webhooks for latency, reconciliation for correctness" in one breath signals you have actually operated a financial integration in production and know webhooks alone are never enough.
Takeaway. Assume at-least-once delivery and engineer idempotent, exactly-once effect; back every integration with reconciliation jobs, an immutable event log and a DLQ - webhooks for latency, reconciliation for correctness.
Self-check
Common O2C failure modes
After this you can diagnose the leakage and breakage points interviewers probe.
Interviewers test depth by asking where O2C breaks, because naming failure modes proves you have lived through them. Each one below maps to a stage you just walked and each has a detection mechanism you should be able to name in the same breath.
Interactive diagram. Tab through its regions; each focused region shows its detail in the panel below.
Annual prepay = cash now, revenue spread over the term.
- Failure mode
- Revenue leakage
- Root cause
- Usage that's un-metered, mis-rated or whose overage is never captured
- How you catch it
- Raw-to-rated-to-invoiced reconciliation; alert on any unexplained delta.
- Failure mode
- Duplicate / dropped usage
- Root cause
- Retries without dedup or a webhook silently missed
- How you catch it
- Idempotency keys plus a count check between producer and metering store.
- Failure mode
- The translation gap
- Root cause
- CPQ/contract terms the billing engine can't actually enforce
- How you catch it
- Validate every quoted construct against what the rater supports before signing.
- Failure mode
- Unapplied cash
- Root cause
- Payments that can't be matched to an invoice
- How you catch it
- Reconcile processor cash vs ERP applied cash; watch the unapplied bucket.
- Failure mode
- Period-close surprises
- Root cause
- Late usage or contract mods landing after the books are 'closed'
- How you catch it
- Accrue for known-late usage; correct with credit memos and true-ups, not back-dating.
| Failure mode | Root cause | How you catch it |
|---|---|---|
| Revenue leakage | Usage that's un-metered, mis-rated or whose overage is never captured | Raw-to-rated-to-invoiced reconciliation; alert on any unexplained delta. |
| Duplicate / dropped usage | Retries without dedup or a webhook silently missed | Idempotency keys plus a count check between producer and metering store. |
| The translation gap | CPQ/contract terms the billing engine can't actually enforce | Validate every quoted construct against what the rater supports before signing. |
| Unapplied cash | Payments that can't be matched to an invoice | Reconcile processor cash vs ERP applied cash; watch the unapplied bucket. |
| Period-close surprises | Late usage or contract mods landing after the books are 'closed' | Accrue for known-late usage; correct with credit memos and true-ups, not back-dating. |
The translation gap, in detailthe one that catches CPQ teams
Sales and Legal can write any term they can imagine into a contract. The billing engine can only enforce the constructs it actually supports. When a quote promises a pricing structure the rater cannot model - a bespoke tier curve, a cross-product discount, a custom true-up cadence - someone ends up hand-billing it in a spreadsheet and that is exactly where leakage and audit findings breed.
The fix is a feedback loop, not heroics at invoice time. Every novel commercial construct gets validated against the billing engine's capabilities during deal desk, before signature. Part of this role is being the engineer in that loop who says "the rater can't do that as written, here's what it can do" while the deal is still negotiable.
Why period close is where it all comes duethe deadline that makes everything urgent
Close is the moment the four clocks have to agree for a period. Late usage, a mid-period upgrade, a missed webhook, an unapplied payment - any of them surfaces here under a deadline. The mature posture is to expect lateness and design for it rather than to pretend the period is truly frozen.
- Accrue for known-late usage. If you know events routinely arrive a few days late, estimate and accrue rather than under-stating revenue, then true up to actuals.
- Correct forward. A modification or late event after close is booked in the current period via credit memo or true-up; you do not reopen closed books.
- Make reconciliation a pre-close gate. The raw-to-rated-to-invoiced and cash-application checks should be green before you close, not discovered after.
If you're asked to design any O2C component, volunteer its failure mode and detection unprompted: "here's the metering pipeline, here's how it leaks if dedup fails and here's the reconciliation that catches it." Pairing every design with its failure mode and its control is the exact judgment this solo, greenfield charter is screening for.
Takeaway. The five O2C failures - leakage, duplicate/dropped usage, the CPQ-to-billing translation gap, unapplied cash and period-close surprises - each have a named detection; design the control alongside the component.
Self-check
Running O2C work in Cursor: two modes
After this you can use Cursor as a one-off analyst on O2C investigations and as a builder of durable RevOps tooling.
Knowing the lifecycle is half the charter. The other half is doing the work fast, and a finance team running this exact pipeline at Cursor uses the editor in two distinct modes. Mode one is AI-as-analyst: a throwaway investigation you run once. Mode two is AI-as-builder: a durable tool the team uses every day. The same surface, two different jobs.
Interactive widget. Tab through its controls; the result updates in the panel below as you change them.
An investigation often becomes an analysis, which becomes an automation, which feeds a dashboard.
Analyst mode answers one question and you throw it away. Builder mode ships a tool the team keeps using.
Mode one: drop a Slack thread into a fresh agentthe billing investigation that took a day
A finance teammate flagged a self-serve account with ten stacked unpaid invoices - the product should have blocked the account after the first non-payment, and didn't. The whole investigation was one move: open a new agent, paste the raw Slack thread, hit go. Nothing else. With the GitHub repo open and Databricks, Slack and Notion wired in over MCPModel Context Protocol. A standard that lets an AI agent pull in context from outside the repo, like Jira tickets or internal docs., the agent reasoned across every system, built its own to-do list, and worked the problem end to end.
- 1Paste the raw thread. Open a fresh agent and drop the unedited Slack thread in as the prompt. No cleanup, no framing.
- 2Let it discover the code. The agent searches the repo live and locates the exact function that should have gated the account after the first unpaid invoice. You don't need to know the codebase yourself.
- 3Validate against the customer. It checks the failure against that specific account in the warehouse, confirming the bug reproduced for them.
- 4Quantify the blast radiusHow much breaks if a change goes wrong; the scope of potential damage.. It summarizes every impacted team - open invoice counts, total exposure, and the top ten customers by open value.
- 5Propose the fix and file it. It drafts the code fix and a Linear bug report so eng can pick it up.
An order-to-cash investigation that normally means a day of digging plus eng triage collapsed into a single chat. You aren't expected to know where the gating logic lives; the agent finds the files for you.
"Typically, this sort of investigation might take you a day... And so, we've been able to do all of that in the space of, 5 to 10 minutes."
Mode one, deeper: a structured prompt for processing-cost analysisinterchange-plus, in one chat
The same mode handles heavier analysis. Cursor's self-service volume runs roughly $200M/month through Stripe on interchange-plus (IC+) pricing, which passes through the underlying card-network and issuing-bank costs with a markup. That gives full visibility into the real cost of each transaction, unlike a blended sticker rate like 2.9% + 30c. The analytical leverage is in the prompt structure, not in any one clever question.
- Persona. Open with who's asking and what decision the analysis feeds, so the output lands at the right altitude.
- Data. Point at the tables: the auths history, the balance-transaction file, and per-transaction cost data - card, card type, country, interchange and scheme fees. If the financial warehouse is wired in, Cursor queries it directly instead of needing files.
- Optimization categories. Name the specific levers to investigate - notably L2/L3 data-quality eligibility, where US transactions can qualify for cheaper interchange when you pass the right metadata.
The output is a one-off answer built into a Cursor CanvasA surface that renders visual outputs (such as a coverage or accessibility report) that aren't plain Markdown or diagrams., not a tool anyone re-runs. You ask it once, act on the finding, and move on. That is exactly the shape of work that used to require pulling several teams into a room.
"This type of analysis is something that took multiple days and required meeting with many different teams."
Mode two: the contract-provisioning queueclosed-won to provisioned, on a cron
Enterprise provisioning used to be fully manual. Someone ran a daily closed-won report from Salesforce, hand-copied data between spreadsheets, downloaded each order form, validated it against Salesforce, then Slacked "ready to provision." It cost one to three hours a day, it was error-prone, and it did not survive 10x growth. Deal volume went from about 100 a month to 700-800 a month. The team replaced the whole thing with a built application.
Interactive diagram. Tab through its regions; each focused region shows its detail in the panel below.
A cron every 15 minutes turns a signed contract into a provisioning decision in about two minutes.
When the validation step finds a gap between Salesforce and the signed PDF, the form is authoritative. The system flags the discrepancy to deal desk so they can correct Salesforce, but provisioning proceeds rather than blocking on every upstream data-entry error. That keeps the automation from stalling while preserving a correction loop and an audit trail.
"At the end of the day the signed order form is the source of truth so we're going to go ahead and provision that anyway."
Non-technical builders confuse these. The provisioning queue is a fully built application deployed inside the environment and gated to the accounting Okta group - distinct from a transient agent chat. The whole demo, including the queue, was built on internal tooling using demo data that mirrors the real queue.
"This is not an agent. This is actually a fully built application that lives and is deployed within environment... So anyone within the accounting Okta group can access this."
Each deal now clears in about two minutes with a full audit log shareable with auditors. The process scaled 8x in deal volume with zero added headcount.
"We're doing 7 or 800 deals a month now. We were doing 100 when I started. This would be someone's full-time job just doing this validation. And so, we've been able to scale this process without having to add a single person."
When an interviewer asks how you'd attack an O2C defect or a cost question, separate the two modes out loud. "For a one-off billing investigation I'd open a fresh agent, drop in the raw context and let it discover the code and quantify the exposure. For a recurring bottleneck like provisioning I'd build a permissioned, scheduled app with an audit log." Naming analyst-versus-builder shows you know which problems deserve a durable tool and which deserve a throwaway chat.
Takeaway. Use Cursor in two modes on O2C: analyst (drop raw context into a fresh agent for a one-off investigation or cost analysis) and builder (ship a permissioned, scheduled app like the provisioning queue with the signed order form as source of truth and a full audit log).
Self-check
QIn the automated provisioning queue, the LLM-extracted seat count from the signed order form doesn't match the seat count in Salesforce. What does the system do, and why?