Description
AI Traffic & Sales Tracking for WooCommerce — ChatGPT Ads, Product Feed & AI Visibility
Something is already sending you customers, and your analytics can’t see it.
When a shopper asks ChatGPT “find me a cordless drill under $80 that ships in 2 days” and buys from the store it names, that order lands in WooCommerce looking like ordinary direct traffic. Google Analytics shows you nothing. Your reports show you nothing. You cannot tell whether AI assistants are worth your attention, because you cannot see them at all.
This plugin makes the AI channel visible, makes you the answer it gives, and lets you buy more of it. No theme changes, no replatforming, no new payment processor.
🌐 Plugin home: www.xpay.sh/merchants/woocommerce/
See the AI channel
- AI crawler analytics — which assistants visit (GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended and more) and what they read. Opt-in, off by default, known AI bots only.
- AI-attributed orders — your real WooCommerce orders traced to the assistant that referred the buyer (ChatGPT, Claude, Perplexity, Gemini, Copilot and more), with the match rate against all your orders so you can check the number.
- Agent-readiness audit — how well AI shopping assistants can read and recommend your catalog, with a prioritised fix list.
- Agent delivery speed — how fast your catalog,
/llms.txtand product pages answer the AI crawlers themselves.
Win the AI channel
- An agent-readable product feed — full catalog with live prices and stock on xpay’s CDN, refreshed within ~30 seconds of a change.
- AI-shopping structured data —
Product,Offer,BuyActionandItemListJSON-LD that fills only the gaps Yoast, Rank Math or WooCommerce leave. /llms.txtand an AI user-agentrobots.txtallowlist on your own domain; an existing/llms.txtis appended to, never replaced.- Cart deep-link — an assistant can hand a shopper a one-click link into your existing cart and checkout.
- Product FAQs and return policy —
FAQPageandMerchantReturnPolicydata for products you approve; optionally shown to shoppers (off on new installs). - AI storefront assistant (optional) — on-site shopper chat from your own catalog, only with your say-so.
Run ChatGPT Ads
- Campaigns inside WooCommerce — create, budget, activate and pause campaigns; results sit next to the orders they produced, our reconciled count beside OpenAI’s.
- A ChatGPT product feed to OpenAI’s specification, with a per-product health score.
- Eligibility, up front — minimum catalog size and supported countries checked before you invest time.
- Conversion tracking — link your ads account and purchases from ChatGPT ads are reported back: funnel events from shoppers’ browsers plus a copy of each paid order from your server, under one id so nothing counts twice. Off until you link a pixel; marketing consent respected; your ads key is never stored on your site.
- Works with your existing pixels — Pixel Manager, PixelYourSite or GTM keep running; if another OpenAI pixel is on the store, ours records but does not forward.
Works alongside what you already run
If another plugin already does a job, this one stands down: Yoast SEO, Rank Math and SEOPress schema (fills only the gaps); AdTribes, CTX Feed and Google Listings & Ads feeds; Pixel Manager, PixelYourSite, GTM and WooCommerce Order Attribution; WP Rocket, LiteSpeed, Autoptimize and SiteGround Optimizer (excluded from JS optimization automatically). Declares HPOS and Cart/Checkout Blocks compatibility.
What it doesn’t do
- It doesn’t touch your checkout. Stripe / WooPayments / PayPal / Square / whatever you already use — payment runs through them, unchanged. Your payout schedule is unchanged.
- It doesn’t see your customers. Order summaries carry no buyer name, email, address or payment card. The one exception is ChatGPT Ads conversion tracking, which you switch on yourself: with the shopper’s marketing consent it sends their email (hashed before OpenAI sees it), IP address and user agent so the ad platform can match the purchase. See External services.
- It doesn’t require a new account or contract to start. Free to install and get going — paid plans available as you grow. See pricing.
- It doesn’t slow down your site. The JSON-LD block is tiny and cached; the catalog feed is served from xpay’s CDN, not your origin.
Getting started
Install, activate, click Connect store and grant a read-only WooCommerce REST API key on app.xpay.sh. Your catalog is live on AI surfaces within about 10 minutes. Requires WooCommerce 7.0+, WordPress 6.2+ and PHP 7.4+. Stuck? merchants@xpay.sh or the support forum. What the plugin sends and when: see Privacy and External services below, and the full disclosure.
Source code
GPLv2-or-later, readable PHP, all of it on your server once installed. Changelog: install.xpay.sh/woocommerce/CHANGELOG.md.
External services
This plugin connects to the following xpay-operated services to deliver its core function. Every endpoint and its purpose is documented; full payload disclosure is in the Privacy section.
-
agent-feed.xpay.sh — Public CDN that hosts your AI-readable catalog feed at
https://agent-feed.xpay.sh/catalog/{your-slug}.json. The plugin does not contact this URL directly; the xpay backend writes it from your WooCommerce REST API after you click Connect store. -
agent-commerce.xpay.sh — The agent-side API that AI shopping agents call to surface and buy from your products. The plugin contacts this host at the following paths: (a)
POST /v1/onboard/woocommerce/wc-auth-callbackis the WooCommerce OAuth callback target (WordPress itself calls this on your behalf, server-to-server, after you approve the one-click connect prompt); (b)GET /v1/onboard/woocommerce/status?nonce=…is polled by the xpay onboarding page while the handshake finishes; (c)POST /v1/merchants/{slug}/resynctriggers a fresh catalog ingest after a product or stock change; (d)GET /v1/merchants/{slug}is called when xpay✦ Commerce Settings verifies the current connection state; (e)PATCH /v1/merchants/{slug}/products/{sku}pushes a single-product delta when a WooCommerce product/stock webhook fires; (f)DELETE /v1/merchants/{slug}is sent (non-blocking) when you click Disconnect so xpay marks your account as disconnected and archives the cached catalog. The hostname is also the publicly advertised target forPOST /mcp/{slug}(the JSON-RPC commerce MCP endpoint AI agents talk to) — the plugin itself does not call this URL but lists it in the/.well-known/ucpmanifest. -
app.xpay.sh/onboard/woocommerce — The merchant-side onboarding page. When you click Connect store, the plugin redirects your browser here with three query-string parameters: your site URL, your administrator email address, and a one-time random nonce generated locally. No data is sent to xpay before you click the button. You sign in or sign up on xpay and grant the WooCommerce REST API permission there.
-
agent-commerce.xpay.sh/v1/events — Optional anonymous lifecycle telemetry. Disabled by default; only contacted if you explicitly opt in via the first-activation admin notice or xpay✦ Commerce Settings Privacy. Full payload disclosure in the Privacy section.
-
agent-commerce.xpay.sh/v1/merchants/{slug}/orders — Agent-attributed order reporting for connected stores (non-PII order summary + attribution source; no customer, payment, or personal data). Off via the
xpay_wc_order_events_enabledoption. Full payload disclosure in the Privacy section. -
agent-commerce.xpay.sh/v1/agent-analytics — Optional anonymous AI-bot crawl analytics. Disabled by default; shares the same opt-in as item 4 (and respects a separate
define( 'XPAY_WC_AGENT_ANALYTICS', false )hard-off). When enabled, the plugin counts requests from known AI bots only (e.g. GPTBot, ChatGPT-User, ClaudeBot, PerplexityBot, Google-Extended) — recording the bot name, a coarse page type (home/product/category/discovery-file/sitemap/other), the HTTP status, and whether we routed the bot to your structured catalog. It also sends an aggregate daily count of human pageviews (a number only — no user-agent, no URLs, no per-visit data) as the AI-vs-human denominator. Since 0.5.3 a bot event also carries a salted, one-way hash of the connecting IP address (a bot’s — behind a proxy or CDN this is the connecting edge address), so two hits from the same crawler can be counted as one visitor. The salt is unique to your store and is regenerated every day, so the hash cannot be linked across days or across stores, and the address itself is never stored or transmitted. This applies to AI bots only — a human visitor’s IP is never read, hashed or sent. Events are buffered locally and sent in the background by WP-Cron, never on a page load. Cart, checkout, account, admin and REST paths are never recorded. No per-visit human data, no customer, order, or personal data. -
ai-readiness.xpay.sh — Merchant-facing audit dashboard. The plugin emits a link to
ai-readiness.xpay.sh/m/{your-slug}on the Settings page so you can review the live agent-readiness score xpay computed from your catalog; the plugin itself does not fetch from this host. Opening the link from your browser sends standard browser headers to xpay. - auth.xpay.sh — Public OAuth-protected-resource discovery target. The plugin publishes
auth.xpay.shas theauthorization_servers[0]entry in/.well-known/oauth-protected-resource(an RFC 9728 metadata document AI agents fetch to learn where to obtain a token). The plugin does not contact this host server-to-server; it is referenced for agent-side discovery only. -
install.xpay.sh/woocommerce/{terms,privacy}.html — Legal pages linked from this readme and the Settings privacy panel; opened in your browser, never fetched by the plugin.
-
pixelproof.xpay.sh — xpay’s ChatGPT Ads conversion relay, contacted only when ChatGPT Ads conversion tracking is on (a pixel is linked on xpay✦ Commerce ChatGPT Ads, or you chose “Always on”). Shoppers’ browsers send
POST /pixel/eventsfor page views, product views, add-to-cart, checkout start and purchase: the page URL, the ChatGPT Ads click id and campaign parameters, the products, quantities and prices involved, and — only with marketing consent — a random browser id and, on checkout and purchase, the shopper’s email. Your server sendsPOST /api/woo/server-eventswith each paid order (order id, total, currency, line items, click id, campaign parameters, referring site, how the order was created — e.g. checkout or wp-admin — and with consent the billing email, IP address and user agent). It callsPOST /api/woo/connectandPOST /api/woo/manualwhen you set tracking up, andGET /api/woo/configwhen you open the ChatGPT Ads or Tracking screen, when xpay links a pixel to your store at your request, and about once an hour while a pixel is linked. A store with no pixel linked does not contact this host from shopper traffic. The relay forwards conversions to OpenAI’s Conversions API for your ChatGPT Ads account; OpenAI receives the email only as a SHA-256 hash (plus, with consent, the IP address and user agent), and receives an opt-out flag instead of any identifier when consent is absent. If another OpenAI pixel is on your store, events are recorded for your own reports and not forwarded; orders created in wp-admin and subscription renewals are recorded and never forwarded. OpenAI terms: openai.com/policies. -
widget.xpay.sh/v1/track.js agent-commerce.xpay.sh/widget/track — The visitor tracker, loaded on your storefront for a connected store (by the shopping assistant when it is on, otherwise on its own). It records the shopping journey so you can see which visits — from ChatGPT and elsewhere — turned into orders: page type and path (no query string), page title, product id, category, price and currency, add-to-cart, checkout start, the order id on the thank-you page, the referring site, campaign parameters, device type and language, and a random first-party visitor id (cookie and local storage, 365 days) with a 30-minute session id. It never records a name, email, address or anything typed into a form. It does not run at all for a browser sending Do Not Track or Global Privacy Control. With the WP Consent API installed it waits for the shopper’s “statistics” consent; on a store based in the EU/EEA, UK or Switzerland without a consent tool it is not loaded. Turn it off with
add_filter( 'xpay_wc_tracker_enabled', '__return_false' );. -
nehl6uu58j.execute-api.us-east-1.amazonaws.com — xpay’s merchant API, called from your server by a connected store only.
GET /merchant/widget-config/public/{your-slug}reads your storefront assistant settings (cached up to an hour) andGET /merchant/content-pages/public/{your-slug}reads the pages you publish from the xpay dashboard (hourly). Only your store’s slug is sent, in the path; nothing about shoppers. The connection diagnostic in wp-admin also times the first call. -
Proxied sections — Hourly, a connected store reads its proxy settings from
agent-commerce.xpay.sh(GET /v1/merchants/{slug}/blog-proxy-policy). If xpay enables a section (such as /blog), a request there that WordPress cannot serve is fetched, with the section’s sitemap, from its configured origin: xpay’s content service or a site xpay operates for your store. Sent: the path, the query string minus tracking parameters, your store’s host name and an Accept header. No cookies or visitor data.
Your own website. The Tracking screen fetches your store’s own home page (a request from your server to itself, never to a third party) to check whether an advertising pixel is present in the markup. The result is cached for several hours; no data leaves your site.
Terms of use: install.xpay.sh/woocommerce/terms.html
Privacy policy: install.xpay.sh/woocommerce/privacy.html
Privacy
We never see payment data, and never a buyer’s name or address. The plugin is non-custodial by design: payment stays with your gateway.
- Nothing leaves your site until you click Connect store. Before that, the settings page makes no outbound request of any kind.
- ChatGPT Ads conversion tracking is off until you switch it on. Once on, purchases and shopping events are sent to our relay and on to your ChatGPT Ads account — see item 10 under External services. Customer email, IP address and user agent are included only with marketing consent.
- After you connect we receive: your site URL, your admin email, a one-time nonce, a WooCommerce REST API key so we can read your catalog, your public product fields (name, description, price, stock, images, categories), and an order summary per order — order id, total, currency, SKUs, status and the channel it came from (item 9). No buyer names, addresses or payment data.
- Shopper journey (connected stores). The visitor tracker records pages, products, carts, checkouts and order ids against a random visitor id — never a name, email or address — and does not run for Do Not Track / Global Privacy Control browsers, before consent where a consent tool is installed, or at all on EU/EEA/UK/CH stores without one (item 11).
- Anonymous diagnostics are OFF by default. You’re asked once. If you turn them on, we receive plugin lifecycle events and version numbers tagged with your site URL — and, separately, counts of known AI bots only (which bot, what kind of page, the response code) plus a daily total of human pageviews as a number, so you can see your AI-vs-human split. A human visitor’s IP address is never read, hashed or sent, and cart, checkout, account and admin pages are never recorded.
- Turn it off any time at xpay✦ Commerce Settings Privacy, or hard-disable in
wp-config.phpwithdefine( 'XPAY_WC_TELEMETRY', false );(orXPAY_WC_AGENT_ANALYTICSfor bot counts alone). The constant overrides any UI choice. - Delete your data: email privacy@xpay.sh from your admin address with your store name. Processed within 7 business days.
Every byte, itemised: install.xpay.sh/woocommerce/privacy.html · Terms
Screenshots








Blocks
This plugin provides 1 block.
- Xpay Buy In Ai Chat
Installation
From the WordPress.org plugin directory
- In your WordPress admin, go to Plugins Add New.
- Search for “Agentic Commerce for WooCommerce”.
- Click Install Now, then Activate.
- You’ll be redirected to xpay✦ Commerce Settings. Click Connect store.
- Approve the WooCommerce REST API permissions on app.xpay.sh, then you’ll be redirected back to your store.
System requirements
- WordPress 6.2 or higher
- WooCommerce 7.0 or higher
- PHP 7.4 or higher
- SSL (
https://) on the store domain — required for the agent discovery files to be honored by AI surfaces
FAQ
-
Will this slow down my store?
-
No. What we add to your pages is a few lines of invisible data. Your catalog is served from our CDN, so AI shoppers reading it never touch your server at all.
-
Does xpay see my customers or their payment details?
-
Never their payment details: payment runs through your existing gateway exactly as it does today, and no buyer name, address or card ever reaches us. Once connected, we receive an order summary (order id, total, currency, SKUs, status, and which channel it came from) so we can show you which orders AI sent. If you switch on ChatGPT Ads conversion tracking, a buyer’s email is included only with their marketing consent, and is passed to OpenAI as a one-way hash — see External services, item 10.
-
Will it change how my product pages look?
-
Almost everything we add is invisible to shoppers. The one exception is the product FAQ block, and it is off on new installs — nothing appears on your store until you ask for it.
-
I already use Yoast or Rank Math. Will this conflict?
-
No. We check what they’ve already published and add only what’s missing, so you never end up with two of anything.
-
How much does it cost?
-
Free to install and use. Paid plans as you grow — see pricing.
-
What does it send to xpay, and when?
-
Nothing until you click Connect store. After that: your public product details (name, description, price, stock, images, categories) so we can publish your catalog for AI shoppers; an order summary per order (no buyer name, address or payment details); and, from shoppers’ browsers, the pages they visit on your store (see item 11 under External services). ChatGPT Ads conversion tracking sends more, and only once you switch it on (item 10). Optional anonymous diagnostics are off by default and you’re asked once. Full disclosure.
-
How do I remove it?
-
Plugins Deactivate Delete, and everything the plugin wrote is removed from your database. To also delete your catalog from our CDN, email privacy@xpay.sh from your admin address.
-
I run several stores. Do I install it on each?
-
Yes — each store gets its own catalog and its own settings.
-
Do you support Subscriptions, Bookings or Memberships?
-
Simple, variable and grouped products today. The others are on the roadmap — email merchants@xpay.sh if one is blocking you and we’ll tell you where it stands.
-
My host blocks /.well-known/ — does discovery still work?
-
Yes. There’s an automatic fallback that AI shoppers find on their own. If your host intercepts those paths, nothing breaks.
-
Is the source code available?
-
Yes. GPLv2-or-later, shipped as plain readable PHP in
wp-content/plugins/agentic-commerce-for-woocommerce/. Nothing minified, obfuscated or loaded from a remote script. Developers:add_filter( 'xpay_wc_faq_visible', '__return_false' );turns the FAQ block off from code, whatever the dashboard says. -
I have a question that isn’t answered here.
-
Email merchants@xpay.sh, or post in the support forum on this page — we answer both, and we aim to reply within one business day.
Reviews
Contributors & Developers
“Agentic Commerce for WooCommerce” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Agentic Commerce for WooCommerce” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
The full machine-readable changelog lives at install.xpay.sh/woocommerce/CHANGELOG.md (Keep-a-Changelog format). The summary below is the WP.org-required mirror.
0.8.1
- Additional proxied paths. A connected store can serve more than one merchant-owned section (for example landing pages) on its own domain, limited to the pages each section lists in its sitemap. Off by default; existing /blog behaviour is unchanged.
- Safer path matching. Proxied sections can never use WordPress, WooCommerce or REST paths and never replace an existing WordPress page.
0.8.0
- ChatGPT Ads conversion tracking. Link your ads account on xpay✦ Commerce ChatGPT Ads and every purchase from a ChatGPT ad is reported back to it — funnel events from the browser plus a copy of each paid order from your server, under one id so it is counted once. Your ads key is sent to our backend and never stored on your site.
- Off until you switch it on, and it respects marketing consent (WP Consent API, or a no-consent default for EU/EEA/UK/CH stores).
- One pixel per store. If another OpenAI pixel is already installed, we record for your reports and do not send to OpenAI, so no purchase is counted twice.
- Paid vs organic ChatGPT. Orders from a ChatGPT ad click are now told apart from organic ChatGPT recommendations.
- Fixed: orders placed with the block checkout carried no AI attribution.
- Fixed: connecting failed on stores using Perfmatters “Disable REST API”. The plugin now exempts only its own routes.
0.7.1
- Widget loading latency improvement.
0.7.0
- See your AI traffic without connecting anything. The plugin now counts which AI assistants read your store — ChatGPT, Claude, Perplexity, Gemini and others — and shows it to you on a new dashboard, using only your own site’s data. No account, no key, and nothing is sent anywhere. Previously every number needed a connected store first.
- A new xpay Commerce menu, with dashboards for AI revenue, ChatGPT Ads, your product feed, tracking and your storefront. Your settings page has not moved — everything you had bookmarked works exactly as before, and the new menu links straight to it.
- AI-attributed orders now show a match rate. Every figure states what share of your real orders it accounts for, and where orders could not be traced we explain the reasons that causes. A revenue number you cannot check is not worth having.
- Catalog health scoring — see which products are missing a description, image, price or identifier before any of it reaches an AI shopping surface, and why each one matters.
- ChatGPT Ads eligibility is checked up front, so you find out whether your store qualifies before setting anything up rather than after.
- Pixel checking rather than pixel installing. If you already run Pixel Manager, PixelYourSite or a Tag Manager container, keep it — this checks what you have instead of adding a second pixel that would count every sale twice.
- A storefront page that shows exactly what shoppers can see, with a direct link to switch each one off. Having access to a feature and agreeing to display it are separate decisions.
- The first-run diagnostics prompt is a third of its previous length and says plainly what is and is not sent. The choice, the default (off) and the disclosures are unchanged.
- Agent-attributed orders that never completed are now reported too. If a shopper referred by an AI assistant reaches checkout but the order ends up cancelled or failed, that outcome is now sent to your xpay dashboard alongside the successful ones, so your attributed totals are not quietly flattering. Applies to connected stores only, and carries no customer, payment or personal data — as before.
- More resilient. Each part of the plugin now starts independently, so a fault in one can no longer affect your storefront or the rest of the plugin.
0.6.3
- The AI Storefront Assistant now loads reliably alongside caching/optimization plugins. When WP Rocket, LiteSpeed Cache, Autoptimize or SiteGround Optimizer minifies, combines, delays or self-hosts JavaScript, it could break the assistant loader so the chat bubble never appeared — while everything looked fine in an incognito/preview window. The loader is now excluded from those optimizers automatically, so you no longer need to add a manual exclusion. (For W3 Total Cache or an edge cache, which have no runtime hook, the plugin still shows a one-line manual-exclusion note.)
- Fixed: the assistant could show “Array” instead of your store name on multilingual stores. A localized store name is now resolved to your store’s language before it’s displayed.
- No other storefront changes — reliability fixes only.
0.6.2
- Your approved product FAQs can no longer be wiped by a partial or interrupted sync. Previously, every FAQ sync replaced the entire stored set with whatever it received — so if a sync ran with an incomplete list (a dropped connection, a catalog still rebuilding), any product left out had its FAQ silently deleted. A sync that would shrink your FAQ set by more than half is now refused unless it explicitly confirms a full replace, so an accidental one fails loudly instead of clearing your pages.
- A single product’s FAQ can now be updated on its own. Approving one new product, editing one answer, or changing the heading no longer resends every FAQ — the update touches only the products it names and leaves the rest exactly as they were. Only the changed product pages are cleared from your cache.
- No visible change to your storefront; these are safety improvements to how xpay keeps your FAQs in sync.
Older releases (0.1.0 – 0.6.1) are listed in the full changelog:
https://install.xpay.sh/woocommerce/CHANGELOG.md
