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) and pro_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/analytics for 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 the ADMIN_USER_IDS env 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_URL environment 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/api as 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/inventory returns 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/events returns a paginated feed of sale and restock events across the whole store.
  • GET /api/store-detail/:slug/inventory/product/:shopifyId returns per-product inventory history and events.
  • Requires the store to expose inventory_quantity on variant JSON — stores that hide inventory report total_inventory: 0.
2026-03-10

Snapshot compare endpoint

  • GET /api/store-detail/:slug/compare does 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 bind parameter 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, and CleanupSnapshotsWorkflow on cron triggers. See monitoring workflows.
2026-02-15

x402 payment protocol

  • POST /api/jobs accepts x402 payment via X-PAYMENT header. 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/:jobId provides real-time job progress via WebSocket backed by a Cloudflare Durable Object. Replaces the need to poll /api/jobs/:id/status during 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/stores lists every analyzed store.
  • Reports older than 30 days are auto-published as SEO content via AutoPublishReportsWorkflow.
  • GET /api/stores paginated browse and GET /api/stores/:slug full store page data endpoints.

Next steps

API overview

Browse the current API reference.

Learn More
FAQ

Common questions about the platform.

Learn More
Ask a question... ⌘I