Agent Stamp

Analytics say Direct and the orders keep coming ·

How do I track ChatGPT and AI agent orders in WooCommerce?

Read the order request, not the traffic report. Agent Stamp writes the buyer on each order when it is placed: Human, a named agent such as ChatGPT or Claude, Unattended, API, or Unknown. The Buyer column shows it, and one page totals the orders that were not a person in the last 30 days. A table breaks that down by buyer.

Visit, order, payment, totals, funnel

These are five different questions. A visit on the Agents tab is not an order. An order stamp is not payment proof. A payment stamp names what the gateway reported; it is not bank settlement. The Orders tab and the Agents tab Paid column answer different questions.

Five counts, five meanings.
QuestionWhereWhat it means
VisitAgents tabA declared or signed agent opened a product, cart, or checkout page. Crawlers are skipped. ChatGPT-User here is a user-triggered page fetch, not purchase evidence.
Order stampBuyer columnInitial stamp when WooCommerce places the order. Strong gateway signals can update it unless already signed. Declared is self-reported. Signed authenticates the request operator, not buyer intent.
Payment attributionOrder box, after checkoutWhen the order moves to processing, completed, or on-hold, the plugin reads gateway meta. Payment confidence is gateway attribution, not proof of settlement. Strong signals can restamp the order unless already signed. Stripe Link alone is weak evidence and never changes the stamp.
Order totalsOrders tabCounts stamped orders in the period that were not Human. Includes processing, pending, on-hold, completed, and refunded orders. Excludes failed, cancelled, and checkout-draft only. Sums each order’s total. Not paid-only: unpaid and refunded orders can be included.
Paid funnelAgents tab, Paid and Revenue columnsPaid counts agent sessions marked ordered in the visit funnel: a thank-you page view or a paid-order event. It is a session count, not paid evidence alone; reaching the thank-you page does not prove payment. Revenue beside it sums stage=ordered events only, written when status moves to processing, completed, or on-hold with payment recorded. On-hold waiting for bank transfer does not get an ordered event until WooCommerce records payment. Separate from Orders tab totals.

Why analytics miss them

Traffic reports sort visits by referrer and by tags in the link. A chat app often sends no referrer. An agent that checks out may never run the theme’s analytics script. The order still arrives, and the report files it as Direct. That is why AI orders look like Direct.

How the stamp is written

  1. Classifier reads the user-agent and checks any Web Bot Auth signature. Signed names the operator from the key host. Declared names a published token such as ChatGPT-User. Crawlers such as GPTBot become Unknown.
  2. Witness merges checkout presence and browser signals. No person at Place order becomes Unattended. Two automation signals on a trusted click become Likely agent.
  3. Payment runs when the order moves to processing, completed, or on-hold, before bank settlement is proven. Strong gateway signals can update the stamp to payment confidence. A signed stamp is kept. Link wallet payments are recorded as weak evidence only.
  4. Orders tab totals sum stamped order totals for the period. They are not paid-only.
  5. Agents tab Paid counts sessions the funnel marks ordered (thank-you page or paid-order event). Revenue beside it sums stage=ordered events only; a thank-you visit alone adds no revenue.

What gets written on the order

  • Human: an ordinary browser, a person at the place-order control, and no agent signature.
  • ChatGPT (declared): the user-agent was ChatGPT-User and nothing was signed. Self-reported, not purchase evidence by itself. Claude-User, Perplexity-User, Google-Agent, and GrokAgent work the same way.
  • Claude (signed): the Web Bot Auth signature matched the key its operator published. Authenticates the operator, not buyer intent or payment.
  • Likely agent: a trusted click placed the order, but the page saw at least two signs that a program drove the browser. Not proof, and no name.
  • Unattended: the checkout page saw no person, or the browser reported itself as automated.
  • API (python-requests): the order came through the REST API or a commerce protocol channel such as UCP, ACP, or MCP, not the checkout page.
  • Unknown: anything else, such as a signature that failed, or a crawler such as GPTBot claiming to check out.

The user-agent is kept on the order next to the stamp, so the line can be checked later. The published tokens are a fixed list.

Seeing the total

Open WooCommerce, then Agent Stamp, then Orders. It says how many stamped orders in the last 30 days were not a person, and the sum of their order totals. That total is not paid-only. A table lists them by buyer, with orders, revenue and share. How much did AI agents buy? Pro adds a Buyer filter to the orders list, and Not a person shows every order that was not stamped Human. Once a week, if any order was not a person, the store admin gets one email that counts those orders by kind and lists each one with its total. The email leads with the revenue from them.

What it does not count

Visits that did not buy are not orders, so they get no stamp. A crawler such as GPTBot reads pages and does not check out. GPTBot is not an order. Orders placed before Agent Stamp was active were never stamped, and failed or cancelled orders are left out of the totals.

Get the plugin