Cookie preferences

Choose what we may use. Strictly necessary cookies keep you signed in and can't be turned off; everything else is your call and changes nothing about how the site works. You can change your mind any time from the footer.

For Square

A card-present sale is the hardest thing in marketing to attribute. It is also most of your revenue.

Export your Square transactions, upload the enquiries beside them, and find out which marketing produced the people who walked in.

No API key Nothing to install in SquareNothing to install No card requiredNo card

CloseRev reads a Square export of transactions — the customer's email or phone where it was captured, the amount and the date — and matches it against the calls, forms and ad clicks that brought that person in. A card-present sale is the least attributable event in marketing: there is no click, no session and no referrer, only somebody standing at a counter. Sales with no matching lead are reported as Direct / Unknown rather than assigned to whatever was running.

Last checked against Square's own documentation on September 24, 2026.

The gap

You advertise to bring people through the door. They come through the door. Nothing you own connects those two sentences.

Square sees

What was sold, to whom, and for how much.

no shared row
Your ad account sees

The click, the keyword, the call, and what each one cost.

The file

What the export needs in it.

Three things carry the match: who, how much, and when. Anything else is optional and only changes how the report can be sliced.

  1. Needed

    Customer email or phone

    On the customer record attached to the transaction. This is the constraint that decides everything on this page: a sale with no customer attached cannot be matched at all.

  2. Needed

    Transaction or invoice total

    What was taken, net of refunds. Tips are a judgement — include them consistently or exclude them consistently.

  3. Needed

    Transaction date

    When the payment was taken. For Square Invoices, the paid date rather than the sent date.

  4. Optional

    Location

    Which site took the sale. For anybody running more than one, this is the column that turns an average into a decision.

Step by step

Getting the file out of Square.

Written for somebody with Square open in the next tab. Report names vary by edition, so each step says what to look for.

  1. Export transactions with the customer attached

    One row per sale with a contact detail, the amount and the date. A transactions export without a customer column is the common case and it cannot be matched — check this before anything else.

  2. Look at how many sales have a customer at all

    This is the single number that decides whether the exercise works. If a quarter of sales carry an email or phone, that is your ceiling, and the report will say so rather than pretend otherwise.

  3. Export your enquiries

    Call tracking, the booking widget, the contact form, local search leads. Contact detail plus where it came from.

  4. Cover a wide enough window

    Somebody who searched on Tuesday may come in on Saturday, or the Saturday after. Give the sales file more room than the enquiry file.

  5. Upload both

    The join runs on the email and the phone, normalised, and reports first sales separately from repeat ones.

What comes back

The page Square cannot show you.

Revenue by channel, the count of sales behind each figure, and an honest bucket for the ones nobody could trace. Sample figures, from the worked example on the Med Spas & Dermatology page — not from a Square account.

Traced to a channel$165,60072% of $230,000
Sales matched201 of 280high confidence only
Average sale$820per paid sale
ChannelShareSalesRevenue
Meta Ads96$78,200
Google Ads61$55,200
Email marketing44$32,200
Direct / Unknown79$64,400

Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.

The argument

What changes when the sale and the ad share a row.

No click, no session, no referrer — and it is where the money is

Everything digital advertising measures depends on the purchase happening in a browser. A card-present sale has none of it: no click to attribute, no session to attach, no referrer, no landing page.

So businesses that sell in person get told, in effect, that their advertising produces nothing — or they get a proxy like store visits, which is modelled, cannot be reconciled with anything, and never appears on a bank statement.

Matching a payment export against an enquiry file is the only reading built on two things that actually happened: somebody enquired, and somebody paid. It is coarse and it is real, which is the right trade for a question that currently has no answer at all.

The customer record is the whole ceiling, and most businesses have not thought about it

Square will take a payment without knowing anything about who paid. Many businesses run for years that way, and their transaction export is a list of amounts with no people attached.

Where a customer is attached — because they were emailed a receipt, booked an appointment, joined a loyalty scheme or were invoiced — the sale can be matched. Where they are not, it cannot, and no amount of cleverness changes that.

So the honest first step is counting. If the attachment rate is low, the report will show a large Direct / Unknown, and the useful conclusion is about the till process rather than about the marketing. Emailed receipts alone typically move this more than any campaign change would.

Appointments and invoices match far better than walk-ins

Square's booking and invoicing products capture a contact detail as a matter of course. A salon appointment, a trades invoice or a quote sent by email arrives with an email address attached and matches cleanly.

An anonymous counter sale does not. That means the matched share is not evenly distributed across a business's revenue, and reading it without knowing that will mislead — the bookable side of the business will look like it is where all the marketing works.

Where the export distinguishes the two, read them apart. It is the difference between a report about your marketing and a report about your data capture.

Several locations, one budget, one average that helps nobody

Multi-site operators buy marketing centrally and read it centrally, and the blended cost per customer is the number that reaches the owner.

The same campaign performs very differently across sites — catchment, competition, footfall and the staff at the counter all differ — and the average describes none of them. It is entirely normal for a channel to be the cheapest customer at one site and the most expensive at another.

Where the transaction export carries a location, the report splits on it, and that split is usually the reason a multi-site business does this at all.

Fair questions

“Square already does that.” Not quite.

They say

“Most of our sales have no customer attached.”

We say

Then the report shows a large Direct / Unknown and tells you the truth about what is measurable. Emailed receipts are usually the cheapest way to change that.

They say

“Square already shows customer directory insights.”

We say

Those describe who bought. They do not describe which advert produced them, because Square never saw the advert.

They say

“We do not want to add steps at the counter.”

We say

Then read the bookable and invoiced side of the business, which already captures contact details, and take the walk-in revenue as unmeasured rather than misattributed.

Questions

Square, specifically.

Something else? Ask us and a person answers.

No. Nothing is installed at the till and no credential to your account exists; the report is built from a file you downloaded.

Start today

Two exports, and you will know.

Nothing to install in Square, no API key, and no need to have been tracking anything until now. Last year works as well as this month.