Skip to content

Which enquiries became sales: matching quotes and invoices back to the lead

Four Make scenarios log every website product enquiry with a normalised email and phone, then match the quotes that go out and the invoices that are raised in the accounting system back to the lead. The result is a lead-to-quote-to-invoice log that answers which enquiries paid.

Sync & integrationFlow2026

Where this applies

Any business that takes enquiries through its website, quotes and invoices in an accounting system, and wants to know which enquiries became sales.

stages linked: enquiry, quote, invoice
3
runs; five early errors, none since
523
between matching passes
4 h

The problem

A website enquiry form and an accounting system don't talk to each other. Sales staff quote and invoice from the accounting side, often weeks after the enquiry, and nothing records that this invoice began as that form. Without that link, nobody can say what share of enquiries is quoted, how many quotes are won, or what the website actually brings in.

The obvious fix, asking staff to tag each quote with its source, is the first thing dropped on a busy day. Matching after the fact is more reliable, but only if the identifiers agree: an email typed with capitals or a phone number written with a country code has to compare equal to the version on the quote.

What we built

01

Normalise once, at intake

Each form entry is written to a leads log with the email and phone exactly as typed and in a canonical form: the email trimmed and lower-cased, the phone stripped to digits and cut to its last nine, so a local and an international form of the same number are identical. The ad-click identifier from a hidden field is kept with the lead. Every later match is a cheap equality search on the canonical column.

02

Quotes by the API, not a trigger

The accounting system offers no watch trigger for quotes in Make, so a scheduled raw API call asks for quotes changed in the last six hours, using an If-Modified-Since header so a quiet period costs about two operations. Only quotes that have actually gone to the customer (sent, accepted, declined or invoiced) and carry an email go on to be matched.

03

An overlapping window and a dedupe check

The quote pass runs every four hours over a six-hour window, so a late run loses nothing, and before writing a match it searches for the quote number and skips one already logged. The window overlaps; the log never duplicates.

04

Status changes as a bulk join

A separate pass keeps each matched quote's status current. It reads two pages of recently changed quotes, aggregates them, reads the match log once, and joins the two in memory with a map expression, writing a row only when its status has moved. A quiet run costs a flat five operations however long the log grows.

05

One row per converted lead

Invoices from the start of the tracking period are watched every four hours. An invoice with a value and a contact email is matched to the earliest lead with that email; if the lead already has a row, the invoice number is appended to a list only if it is not already there, so re-seeing an invoice when its status changes never duplicates it. A customer who buys twice is still one converted lead.

The outcome

  • Across the four scenarios: 523 runs and 4,744 operations in Make's counters since the first went live on 30 September 2026, with five errors.

  • All five errors came from an earlier version of the invoice matcher, in its first two days: an update attempted when no lead had matched. That step was replaced, and the current version has run without error.

  • The intake has logged form entries since 30 September. The quote and status passes went live on 13 October, so the quote side of the log is new.

Where it stops

Matching is by email alone: a customer quoted or invoiced under a different address, such as a company accounts mailbox, is not linked, and the normalised phone is stored but not yet used to match. For a repeat buyer the log lists every invoice number but keeps the value and status of the latest one, so it counts converted leads more reliably than revenue. The quote pass reads one page of up to 100 changed quotes per window, and a gap of more than six hours without a run is not backfilled. The ad-click identifier is carried through but not yet sent back to the ad platform. None of the scenarios has an error route beyond Make's default. A one-off backfill and two unfinished helpers are not described.

Built with

  • Make.com
  • Gravity Forms
  • Xero
  • Google Sheets

Patterns used

  • Normalise at intake
  • API poll with If-Modified-Since
  • Overlapping window plus dedupe
  • Bulk read, in-memory join

Page copy drafted with AI assistance. Skofi is accountable for it. Editorial policy

Start here

Have something shaped like this?

If any part of the above resembles a problem you are living with, a short call is the fastest way to find out whether it is the same problem underneath.

Book a 15-minute callsaveez@skofi.tech

What happens on the call

  • 15 minutes, no deck
  • We map the process on the call
  • A written scope, or an honest no
Book a call