Changelog
Recent changes to the ShopSniffer API, platform, and pricing — organized by release date.
Overview
This changelog tracks notable changes to the ShopSniffer API, platform features, pricing, and documentation. Breaking changes (rare — we aim for backward compatibility) are explicitly flagged.
2026-04-12
Stripe billing + single_report metadata + heat graph
- Stripe subscription billing is now wired through the Better Auth Stripe plugin. Two plans are live:
single_report($9.99) andpro_monthly($29.99). - Single report metadata fix ensures Stripe webhook handlers correctly link completed checkouts to user accounts.
- 365-day change heat graph added to
GET /api/store-detail/:slug/analyticsfor dashboard visualizations. - Universal plan card on the pricing page consolidates Free, Single Report, and Pro Monthly into a single comparison.
- Onboarding UX improvements for first-time users signing up via email/password.
2026-04-11
Admin user ID migration to Better Auth
- Admin user ID is now sourced from Better Auth sessions instead of the old Clerk user ID format. Admin endpoints (
src/api/admin.ts) verify against theADMIN_USER_IDSenv var using Better Auth session IDs. - No user-visible change — this completes the migration scaffolding for a future clean removal of Clerk-era identifiers.
2026-04-10
Email/password auth + hardcoded baseURL removal
- Email/password auth is now enabled on Better Auth alongside Google OAuth. Users can sign up with a traditional email + password combo.
- Hardcoded localhost baseURL removed from the Better Auth config. The base URL is now driven by the
BETTER_AUTH_URLenvironment variable, which fixes redirect loops in production.
2026-04-09
Better Auth route handler fix
apiRouter.all("/auth/*")now catches all HTTP methods for the Better Auth handler. Previously only GET was mounted, which broke sign-in POST requests.
2026-04-08
OpenTelemetry dependency
- Added
@opentelemetry/apias a peer dependency required by Better Auth. No runtime behavior change; this was purely a dependency resolution fix.
2026-04-05
Better Auth migration — user-facing
- Breaking for local-dev integrators: Auth moved from Clerk to Better Auth. The API surface is the same (
/api/auth/*) and external clients using API keys or x402 are unaffected. - Session cookies replace Clerk JWTs for browser-based auth. Existing users were migrated transparently on first sign-in.
- Email/password + Google OAuth are supported at launch.
- Stripe billing integrated via the Better Auth Stripe plugin (completed in the 2026-04-12 release).
2026-03-22
Inventory events & velocity tracking
GET /api/store-detail/:slug/inventoryreturns store-level inventory summary with estimated daily sales, total units sold in the last 30 days, and recent restocks.GET /api/store-detail/:slug/inventory/eventsreturns a paginated feed of sale and restock events across the whole store.GET /api/store-detail/:slug/inventory/product/:shopifyIdreturns per-product inventory history and events.- Requires the store to expose
inventory_quantityon variant JSON — stores that hide inventory reporttotal_inventory: 0.
2026-03-10
Snapshot compare endpoint
GET /api/store-detail/:slug/comparedoes a side-by-side diff of any two job snapshots for a tracked store. Returns added, removed, and changed items by type with up to 500 items per category.- Uses D1 JOINs rather than D1's
bindparameter list, which avoids hitting D1's max-parameter limits on large stores.
2026-03-01
Cloudflare Workflows pipeline
- Replaced the ad-hoc queue-based scraper with a durable Cloudflare Workflows pipeline (
ScrapeShopWorkflow) with per-step retries and exponential backoff. Jobs survive worker crashes and resume from the last completed step. - Added
MonitorShopsWorkflow,AutoPublishBlogWorkflow,AutoPublishReportsWorkflow, andCleanupSnapshotsWorkflowon cron triggers. See monitoring workflows.
2026-02-15
x402 payment protocol
POST /api/jobsaccepts x402 payment viaX-PAYMENTheader. Send an unauthenticated request to receive a 402 Payment Required response with USDC-on-Base payment details, then retry with a signed proof.- Enables fully account-free per-request payments for autonomous AI agents. See x402 payment and the x402 tutorial.
2026-01-20
Job progress WebSocket
GET /api/ws/:jobIdprovides real-time job progress via WebSocket backed by a Cloudflare Durable Object. Replaces the need to poll/api/jobs/:id/statusduring a running scrape.- Push-based updates with sub-second latency and no rate limits on the connection.
2026-01-05
Public store directory + SEO content
- Public directory at
https://shopsniffer.com/storeslists every analyzed store. - Reports older than 30 days are auto-published as SEO content via
AutoPublishReportsWorkflow. GET /api/storespaginated browse andGET /api/stores/:slugfull store page data endpoints.