These entries describe August releases. For current behavior, use the linked guides: ingestion verification does not complete onboarding, arrival totals remain complete when a small component is withheld, and legacy Launcher is disabled by default.
New accounts start directly in Signals setup
Improved · Registration now creates your default workspace and takes you straight to Signals setup. Empty workspaces also link to the next setup step. Follow the self-serve quickstart.Connect Google Ads from workspace settings
New · Where the Google Ads integration is configured, workspace owners can connect, reconnect, or disconnect it from Workspace Settings and see the accessible customer IDs. Google Ads connection does not enable Google Ads Actions.See last month’s workspace usage
New · The dashboard shows arrivals and observed platform spend for the previous completed UTC month. Incomplete spend or currency data appears as unavailable.Passive measurement stores less commerce detail
Privacy · Passive measurement now rounds timestamps to the hour and omits product identifiers, quantities, and item counts. These records remain free of visitor identity and are not sent to advertising destinations. Review passive activity handling.Conversion API responses identify the workspace
Changed · Conversion API responses now include numericworkspace_id. The deprecated signal_tracker_id alias remains available for existing clients, including published 0.5.x SDKs. Read the identifier transition.Signal channel reporting now follows consent scope
Privacy · The dashboard’s channel subset now includes only attributed global arrivals and fully consented strict-EU arrivals. Portfolio, legitimate-interest revenue, and severed-measurement rows stay out of the channel split, while the separate total remains privacy-bounded. When a strict-EU passive total is below five, both the dashboard and CSV showSuppressed (<5) instead of the ledger count. Interpret channels and totals.Send user-data deletion identifiers in the request body
Changed · User-data deletion accepts a verified raw identifier or legacy SHA-256 digest in the JSON body. Identifiers in URL query strings are rejected. Review deletion and identity fields.Visitor identity retention is bounded to 30 or 90 days
Privacy · New and updated Signals configurations now use one fail-closed retention policy across the dashboard and API. The published choices are 30 and 90 days, with 90 days as the default; MCP exposes no retention setter. Review identity retention.Ruby SDK and PyPI CLI expand the official clients
New · Ruby gemplainrouter-sdk 0.1.0 brings the signed Conversion API contract to Ruby 3.2 and newer. Python package plainrouter==0.5.1 now also includes the plainrouter command: install it with pipx install plainrouter==0.5.1 or run python -m plainrouter from an active environment. Install the Ruby SDK or choose a CLI distribution.Official clients publish API 0.5.0
New · TypeScript SDK@plainrouter/sdk@0.5.0, Python SDK plainrouter==0.5.0, Go SDK github.com/plainrouter/sdk-go@v0.5.0, and CLI @plainrouter/cli@0.5.0 are published from the signed API contract. Install the CLI from npm or the official Homebrew tap with brew install plainrouter/tap/plainrouter. Choose an official client.Try the API without an account
New · The public sandbox now lets you validate an identity-free synthetic event without an account or credential. One read-only request also returns a short-lived sandbox key for testing bearer-authenticated client setup. Sandbox requests read no production data, persist nothing, and contact no advertising provider. Try the sandbox.Test MCP integrations without an account
New ·https://plainrouter.com/mcp/sandbox exposes synthetic get_account_state, get_signal_health, get_performance, and validate_sandbox_event calls without a credential or human step. The endpoint is separate from account-bound production MCP, exposes no proposal or spend tools, stores nothing, and contacts no advertising provider. Start in MCP test mode.Browser identity requires full advertising consent
Privacy · Thev4.1.4 collector accepts browser identity only when all three advertising permissions are granted under the consent basis. Review Signals consent behavior.Compare Signal arrivals with platform-claimed clicks
New · The Signals dashboard now compares privacy-bounded observed arrivals with stored account-level platform clicks over the same fully retained daily period. It shows the difference and claimed-click proportion, includes a CSV export, and never makes a live Marketing API request while rendering or exporting. Interpret the comparison.Check Launcher draft status and readiness through MCP
New · Agents can inspect Launcher draft progress and run a readiness check without changing ads. The execution entry remains unavailable. Use the Launcher MCP workflow.Signals keeps completed installation verification
Improved · A verified managed-hostname installation stays verified when recent traffic ages out. During same-origin secret rotation, the old secret remains valid until an arrival successfully authenticates with the replacement. Review serving verification.Strict-EU passive totals honor small-cell privacy
Privacy · Strict-EU passive activity contributes zero to displayed Signal totals until its aggregate cell reaches five arrivals. Passive rows remain identity-free, aggregate-only, absent from event-level APIs, and ineligible for Meta delivery. Interpret Signal activity.Passive measurement omits page URLs and traffic sources
Privacy · Passive measurement no longer stores page URLs or platform and channel sources. These arrivals remain identity-free aggregate data and are not sent to Meta. Review passive activity handling.Signal serving setup now adapts to your hosting stack
New · The Signals dashboard detects your hosting stack in the background and produces one copy-ready setup: a managed-hostname CNAME for platform-constrained sites or same-origin forwarding for Vercel, Netlify, Next.js, Cloudflare, Nginx, and Caddy. Same-origin installs include secret rotation and turn green only after a side-effect-free forwarding probe and the first authenticated arrival. Configure Signal serving.Signal activity includes privacy-bounded passive arrivals
Improved · Activity totals now include customer-visible passive arrivals without exposing them in event-level lists or detail APIs. Invalid traffic stays out of the totals, and strict-EU passive cells contribute only after their aggregate reaches five arrivals. Interpret Signal activity.New Signal installs use the v3 browser contract
Fixed · Plainrouter now generates/s/v3.js installation URLs across onboarding, hostname responses, and the dashboard fallback snippet. The v3 browser API accepts structured consent snapshots and fails closed when required advertising permissions are missing, unknown, denied, malformed, or withdrawn. Its v3.0.1 patch also preserves previously consented visitor state while a returning page waits for the consent platform to restore its decision; no measurement resumes before that decision arrives. Install the current pixel.Spend proposals now require performance evidence
Improved · Signal health remains available for diagnostics, but it can no longer support budget, status, creative-spend, or mixed proposals. Agents must use eligible observed reconciliation data fromget_performance; modeled and portfolio-only events remain outside that evidence path. Upload-only asset proposals keep the narrow non-spend exception. Review the MCP evidence rules.Import Launcher drafts from CSV or XLSX
New · Write and Admin workspace tokens can create Launcher drafts throughPOST /mcp/launcher/import. The adapter accepts bounded CSV/XLSX files, reports invalid rows without hiding valid work, resolves only already-synced Drive assets in the token workspace, and deletes staged uploads after parsing. Read the import guide.MCP execution credentials fail closed
Security · OAuth management credentials are now rejected by default on MCP and agent-authenticated routes. The read-only agent-context route is the sole discovery exception; MCP tools require an account-bound workspace execution token whose tier is capped by the issuer’s current workspace role. Connect an agent.Launcher draft batches arrive in MCP
New · Agents can uselauncher.draft_batch to turn already-synced Drive assets into a structured Plainrouter draft. It requires a Write or Admin workspace token and does not write to Meta or activate spend. Read the MCP reference.Consent-first Signals and simpler activation
New · Signal activation now uses an identity-free server verification event through REST or MCP, making the browser pixel optional for setup. Event ingestion now requires an explicit consent basis and fails closed before ineligible Meta delivery. See what changed in API 0.3.1.SDKs and CLI ship API 0.3.1
New · TypeScript SDK0.3.1, Python SDK 0.3.1, and CLI 0.3.1 are now published. Both SDKs expose all ten signed API operations, including ingestion verification and the consent-aware event contract. Choose a client.Stripe revenue waits for settlement
Improved · Stripe Checkout creates a purchase only after an exactpayment_status of paid. Failed, unpaid, free, missing, and malformed states stay out of the ledger, rollups, and Meta delivery. Review Stripe event behavior.