Shovel Radar Shovel Radar

What just shipped

Changelog.

Auto-generated from git history. Solves the "is this still maintained?" objection for first-time visitors and gives existing customers a place to see what's new each month.

Last regenerated: 2026-06-03. Run python scripts/build_changelog.py to refresh.

2026-06

2026-06-02UPDATETighten CASL-adjacent copy: refer page wording + product rename
2026-06-02UPDATEPost-audit website cleanup: pricing sync, dynamic counts, CASL language, 336 new trade×city pages

2026-05

2026-05-26UPDATEKill public dev API + in-portal LLM to remove $-per-call abuse vectors
2026-05-26UPDATEVercel: consolidate 11 → 9 functions (more headroom under Hobby 12-cap)
2026-05-26UPDATEVercel: consolidate 18 functions → 11 to fit Hobby 12-function cap
2026-05-26UPDATERounds 833-836 batch 7: 390 new scripts — 5 MORE Tier-1 dead-ends flipped
2026-05-25UPDATERounds 829-832 batch 6: 216 new scripts — 5 TIER-1 DEAD-ENDS FLIPPED
2026-05-25UPDATERounds 829-833 batch 5: 158 new scripts via 5 parallel agents
2026-05-25UPDATERounds 819-828 batch 4: 315 new scripts across 8 sources
2026-05-25UPDATERounds 826-828: ~151 new scripts via batch 3 (5 parallel agents)
2026-05-25UPDATERounds 824-825: 159+ new scripts via 5 more parallel city agents
2026-05-25UPDATERounds 822-823: 143 new scripts via 5 parallel city-attack agents
2026-05-25UPDATEFix Vercel slow build: add .vercelignore + untrack 19GB deliverables/
2026-05-24UPDATEvercel.json: drop now-ignored memory: 256 from all 11 function configs
2026-05-24UPDATEoperator routines: daily briefing + Monday + monthly + quarterly + crisis
2026-05-24UPDATEinject cookie-banner.js into 2,733 site pages
2026-05-24UPDATElegal review: Privacy + Terms updated for 6 new endpoints + cookie banner + API ToS
2026-05-24UPDATEsales enablement: discovery + demo + objection + post-sample + pricing
2026-05-24UPDATEportal UI: seats + pinned permits + saved searches + feedback widget
2026-05-24UPDATEdeliverable enricher: map + streetview + stakeholder graph columns per row
2026-05-24UPDATECRM integration playbooks: HubSpot + Pipedrive + Salesforce via Zapier
2026-05-24UPDATEsaved searches + pinned permits + feedback widget (closes 3 competitor-parity objections)
2026-05-24UPDATEmulti-seat: 1 subscription = N portal sign-ins (closes "we need team access" objection)
2026-05-24UPDATEdistribution + community playbooks: G2 + CAB + webinar + awards + clinic + recognition
2026-05-24UPDATEmeasurement: per-product usage attribution + lightweight A/B framework
2026-05-24UPDATEpredictive product: forward-looking signals + DNA matching + read-only API
2026-05-24UPDATEbusiness hygiene: customer health + unit economics + doc drift + vendor map + insurance
2026-05-24UPDATEbrand kit: LinkedIn cadence + press list + speaking playbook
2026-05-24UPDATEhygiene: broken-link crawler + per-template OG images
2026-05-24UPDATEadoption: daily morning briefing + map view + permit-velocity scoring
2026-05-24UPDATEfailure-mode audit: off-site backup + CASL + PIPEDA + exit digest + ops drills
2026-05-24UPDATEdocs: LAUNCH_CHECKLIST.md — what's between code and going public
2026-05-24UPDATEpolish: /about/ + /help/ + 404 search box + footer additions
2026-05-24UPDATEhygiene: healthchecks helper + pre-commit + deliverability audit + better email validation
2026-05-24SEOSEO platform: llms.txt + IndexNow + AI-bot robots + bundle Product schema
2026-05-24UPDATEcontent + free tools: 4 interactive lead-magnets + changelog + roadmap + wins
2026-05-24ANALYTICSanalytics: inject /assets/js/analytics.js into 2,700+ site pages
2026-05-24RETENTIONretention: day-45 NPS + cross-sell + referral + renewal pipeline
2026-05-24TRUSTtrust: /coverage/ + /transparency/ pages + freshness badge
2026-05-24INTEGRATIONSdelivery: Slack + webhook side-channels + integrations landing
2026-05-24SEARCHsearch: multi-city public permit search + homepage front-door CTA
2026-05-24ANALYTICSanalytics: site-wide PostHog instrumentation + server-side conversion
2026-05-24PRICINGpricing: transparency page + pricing.html banner
2026-05-24PRICINGpricing: city-picker auto-rewrites prices; 1,424 trade pages tokenized
2026-05-24PRICINGpricing: per-city multiplier formula + city-pricing.json
2026-05-24STATUSstatus: auto-refresh script + freshness checks
2026-05-24RETENTIONLifecycle: 6-stage onboarding + cancel save flow + partner kit
2026-05-24UPDATELead magnets: trends-report PDF, embed widget, monthly newsletter
2026-05-24COMPAREcompare: 3 competitor comparison pages + hub
2026-05-24SEOSEO: generate 1,264 city x trade landing pages
2026-05-24UXcity-picker: auto-inject Sign in link alongside picker
2026-05-24STATUSstatus: relabel pipeline as Canadian (was Calgary-only)
2026-05-24BUNDLESBundle outreach: 11 cold-email templates + per-bundle prospect packs
2026-05-24DATAExpansion rounds 100-300: federal + city scripts (~2,700 new)
2026-05-24LAUNCHNational launch Phase 1+2: city picker, 91 city pages, trades, resources
2026-05-24RELIABILITYSurface pipeline failures across scripts
2026-05-20UPDATERefresh website samples with Round 38 winning datasets
2026-05-20UPDATEWebsite samples gallery: 36 sample reports across 9 product categories
2026-05-20UPDATEBottom-10 fillers: 104 scripts unlocking Vaughan/Regina/Sherbrooke/Ajax
2026-05-20UPDATECost Pulse: extend to 12 non-trade industries (21 total verticals)
2026-05-20UPDATECost Pulse: aggregator over StatCan IPPI + Bank of Canada Valet
2026-05-19UPDATECleanup: strip trailing whitespace from add_sheet titles
2026-05-19UPDATEFix low_memory+engine=python incompatibility and output path bugs
2026-05-18UPDATERounds 20-21: 19 new scripts for NB, BC, Ontario, Quebec City low-coverage expansion
2026-05-18UPDATERounds 18-19: 91 new scripts expanding Surrey, Quebec City, Moncton, Saint John NB, Fredericton, Burnaby, Ontario, BC coverage
2026-05-18UPDATEFull verification run: fix error handling, add batch runner, fix audit
2026-05-18UPDATERounds 13-15: 91 scripts targeting the thin-coverage areas (Provincial/Waterloo/Atlantic/Federal)
2026-05-18UPDATEConsolidate Calgary deliverables under deliverables/calgary/
2026-05-16UPDATERounds 11-12: 81 scripts targeting cities <25 deliverables
2026-05-16UPDATESellability dry-run: 540/540 non-Calgary deliverables passing (was 530)
2026-05-16UPDATEcalgary_manufacturing_pulse: revert to CMA labels (table 16-10-0011 is CMA-level not province)
2026-05-16UPDATERounds 9-10 + CMA replication: 80+ new scripts, all URLs verified live
2026-05-16UPDATEPull phone enrichment to Q3 2026 roadmap status across website + extend StatCan GEO labels for 14 CMAs
2026-05-16UPDATERounds 6-8: 100+ new scripts + 13 CMA business demography deliverables
2026-05-16UPDATECity depth round 3: 9 more products from city-specific + provincial + federal sources
2026-05-16UPDATECity depth round 2: 52 more products (Toronto 31, Vancouver 26, Winnipeg 24, Montreal 20) + 1 federal IBD = 235 SKUs total
2026-05-16UPDATECross-Canada federal products: DND + NRCan major projects (+38 city products)
2026-05-16UPDATEMulti-city batch: 36 new products across 5 cities via cross-city helper
2026-05-16UPDATECanadian expansion complete: 6 cities, 79 new SKUs, 50 scripts, $0 cost
2026-05-16UPDATEPhase A1 + B partial: Winnipeg (7 products) + Toronto (5 products) shipped
2026-05-16UPDATERepo reorganization: tier 1 cleanup + tier 2 docs + tier 3a Edmonton scripts
2026-05-16UPDATEEdmonton all-in: Waves 1+2+3 — 56 SKUs, 30 scripts, 30 Excel files, $0 cost
2026-05-16UPDATEEdmonton verified end-to-end: 7 deliverables clean + folder reorganization
2026-05-16UPDATEEdmonton expansion: 7 products live with real data, $0 cost, zero Calgary risk
2026-05-16UPDATEPer-product Edmonton mapping reference (all 68 SKUs)
2026-05-16UPDATEMulti-city plan v3: cross-product audit + 10 new free data sources
2026-05-16UPDATEMulti-city scaffolding + Edmonton research: cities/, city_config, strategy plugins
2026-05-16UPDATEMulti-city expansion plan: Edmonton-first, gated on Calgary PMF
2026-05-15UPDATEWire GC Cross-Match into customer delivery dispatcher
2026-05-15UPDATEStripe price sync helper: archive stale, create missing, fix drifted name/desc
2026-05-15UPDATEGC Cross-Match: Trade Pitch Windows tab + Optima removed + founder pricing $399
2026-05-15UPDATEGC Cross-Match: 17 URL fixes + first scrape run = 47/50 verified, real signals flowing
2026-05-15UPDATEGC URL verifier + verified flags on 31/50 GCs
2026-05-15UPDATEGC Cross-Match productization: Stripe + landing page + sample + sales script
2026-05-15UPDATEGC Cross-Match engine: join permits + open RFPs + web signals into one Excel
2026-05-15UPDATEGC Cross-Match foundation: 4-source procurement aggregator + 50-GC website scraper
2026-05-15UPDATEFix Vercel build: consolidate 4 endpoints to stay under Hobby 12-function cap
2026-05-15UPDATEGROUP D operator wins: admin dashboard + Slack webhook + 1-click resend + churn digest + refund-prevention nag
2026-05-15UPDATEGROUP C lead magnets: building-value calc + contractor search + postal-code alerts + permit trends report + AI summarizer
2026-05-15UPDATEGROUP B portal retention: cancel + cadence + recovery + archive + notifications + onboarding
2026-05-15UPDATE3 conversion enhancements: monthly/annual toggle + trade auto-detect + annotated sample tooltips
2026-05-15UPDATEConversion levers: Stripe Checkout + Billing Portal + sample preview + product-page subscribe buttons
2026-05-15UPDATEAdd Sign in (portal) + Contact (mailto) links to main site nav + footer
2026-05-15UPDATEPortal full vision: file downloads + trade routing + diff view + invoices + Stripe-webhook KV auto-sync
2026-05-15UPDATECustomer self-serve portal MVP at /app/ (magic-link auth + pause/resume)
2026-05-15UPDATEFriday recap email + portal MVP plan
2026-05-15UPDATERemove unauthenticated /api/v1/permits public REST API
2026-05-15UPDATELock down API endpoints with 4-layer rate limiting (cost-protection)
2026-05-15UPDATEEmail validation + missing-pipelines runner (both free)
2026-05-15UPDATEFilter Outscraper CSV to Alberta-only deliverable rows (reproducible)
2026-05-15UPDATEFree Calgary email scraper: Outscraper replacement at $27 vs $250
2026-05-15UPDATEPer-prospect cold-email preview generator (spam-safe HTML, no images)
2026-05-15UPDATELuxury bundle production-readiness: real Excel output, schema.org, sales script
2026-05-15UPDATEWire luxury residential through every catalog + recommendation surface
2026-05-15UPDATELuxury Residential vertical: 4-product bundle + PIPEDA-safe pipeline
2026-05-15UPDATEAddress-alerts API + fee calculator + Stripe-pricing sync hardening + FAQ rebuild
2026-05-14UPDATE1,002 SEO pages + free embeddable widget + 5 press release drafts + public REST API + docs site
2026-05-14UPDATEAuto-sample delivery + 5-touch nurture + GC leaderboard + address lookup (all subset-only, zero cannibalization)
2026-05-14UPDATEDistribution flywheel: SEO-first auto-blog (12 weekly retrospectives), free public permit search, Schema.org + sitemap
2026-05-14UPDATEAll 24 brainstorm items shipped — sales templates, persona pages, operational scripts, conversion upgrades, content + tooling
2026-05-14UPDATEItems 1-6: extended enrichment, bundle row-counts, roadmap box, lint, tests, sample-input mode
2026-05-14UPDATEPre-launch sweep: 15 missing Stripe products, 4 icon fixes, post-pipeline orchestrator wiring, polish
2026-05-14UPDATESync website prices to Stripe + cross-product signal enrichment
2026-05-14UPDATEWiden sellability sweep to bespoke-schema deliverables (specialty slices)
2026-05-14UPDATESellability sweep: drop 100%-blank columns from deliverables
2026-05-14UPDATEFailure-mode hardening: atomic state writes, SMTP retry, CASL footer, kill switch, ops runbook
2026-05-13UPDATERip out Calendly + final professionalism sweep
2026-05-13UPDATEDrop orphan landing pages for internal helper scripts
2026-05-13UPDATEWebsite overhaul: fix broken product/bundle pages, polish copy and visuals
2026-05-13UPDATESecurity hardening: form endpoint, redirect allowlist, response headers
2026-05-13UPDATESync website/* to repo root (Vercel deploys from root) — kill Formspree
2026-05-13UPDATEFree Formspree replacement: Vercel serverless function + thank-you page
2026-05-13UPDATEWebsite conversion fixes + Google Drive Phase 2 + marketing v2 + stack decisions
2026-05-13UPDATELaunch-prep deep dive: pricing rationale + marketing strategy + delivery mechanism + website conversion audit + comprehensive launch checklist
2026-05-12UPDATEBring entire repo up to v3 — website + docs + scripts now consistent
2026-05-12UPDATEStandardize all script output filenames to UTC date (fixes mid-run UTC rollover bug)
2026-05-12UPDATELaunch-prep batch: cold-email v3 + sales sheets + fulfillment + Stripe config + landing-page price refresh + healthcheck
2026-05-12UPDATEEstablish PRICING_STRATEGY_2026-05-12.md as single source of pricing truth
2026-05-12UPDATEPRICING_STRATEGY v3: reality-checked SMB lead-list prices, kept premium
2026-05-12UPDATEPRICING_STRATEGY v2: phone enrichment as a first-class pricing dimension
2026-05-12UPDATEAdd ground-up PRICING_STRATEGY_2026-05-12.md (ignores prior pricing docs)
2026-05-12UPDATETriage 52 flagged products: 3 killed, 5 reframed, 44 kept as-is
2026-05-12UPDATEFix 2 product failures, add Phone column placeholder, write sellability + cadence audit
2026-05-12UPDATEtests: allowlist ~60 bespoke products + sync to current behaviour
2026-05-12UPDATEsnif: don't reindex raw_licenses CSV to MASTER_SCHEMA
2026-05-12UPDATEREADME: fix broken refs to deleted docs + sedar module + stale env count
2026-05-12UPDATE.env.example: add GEMINI_API_KEY + Stripe vars, drop deleted-feature orphans
2026-05-12UPDATEFix test-vs-code drift: stale Settings kwargs + new bespoke product
2026-05-12UPDATEAdd launch docs, refresh tests, update README + .env.example + pyproject
2026-05-12UPDATEAdd marketing website, product landing pages, samples, Stripe webhook
2026-05-12UPDATEAdd new product scripts + update existing slices
2026-05-12UPDATEUpdate pipeline modules — schema, enrichment, exports, lifecycle
2026-05-12UPDATEAdd main.py orchestrator and new cci_utils helper modules
2026-05-12UPDATERemove obsolete pipelines, scripts, and planning docs
2026-05-02UPDATEa
2026-05-02UPDATEa
2026-05-02UPDATEa

2026-04

2026-04-30UPDATEFeat: Overhauled routing engine with exact 4-digit permitclass mapping!
2026-04-30UPDATEFixed
2026-04-30UPDATEFixed
2026-04-30UPDATEFixed
2026-04-30UPDATEFix: 7 data-integrity bugs from the 10% sample test
2026-04-30UPDATEFix: Trade splits land in deliverables/trade_splits/, not at project root
2026-04-30UPDATEFix: Repair 5 standalone scripts that crashed on stale paths and schema drift
2026-04-29UPDATEFeat: Expanded product catalog with new specialized lead slices
2026-04-29UPDATEFeat: Expanded product catalog with new specialized lead slices
2026-04-29UPDATEFeat: Wired Zoning Arbitrageur into main execution pipeline
2026-04-29UPDATEFeat: Implement HTML email dispatcher for Zoning Arbitrageur
2026-04-29UPDATEFeat: Implement stateful net-new caching for Zoning Arbitrageur
2026-04-29UPDATEFeat: Initialize Zoning Arbitrageur module and commercial filters
2026-04-29UPDATEDocs: Purge obsolete markdown files and update README for new architecture
2026-04-29UPDATEFix: Resolve legacy import errors and test failures
2026-04-29UPDATERefactor: Centralized deliverables and protected helper data
2026-04-29UPDATEFix: Schema fracture, Category routing, and dead-lead filters
2026-04-28UPDATEQA: Whale_Lists $5M filter + Pipeline_Radar lifecycle coverage rules
2026-04-28UPDATEFix: int('1980.0') silently failed assessment year parse on API path
2026-04-28UPDATEFinal QA: Fixed Enterprise and Retrofit logic
2026-04-28UPDATEFinal QA: Fixed formatting bugs for sellable deliverables
2026-04-28UPDATEDeploy AGLC scraper via GitHub Actions
2026-04-28UPDATEfix: resolve relative paths against project root + UTF-8 stdio + sheet/column fallbacks
2026-04-28UPDATEfix: detect_confirmed_openings handles formatted column names (Address vs address)
2026-04-28UPDATEfix: product scripts find input in src/deliverables + read xlsx correctly
2026-04-28UPDATEfix: contact-fallback infinite spin when all Gemini keys pool-exhausted
2026-04-28UPDATEfeat: AI_SAMPLE_FRACTION + GEMINI_MODEL env vars for test runs
2026-04-28UPDATEfix: universal dtype coercion in tenancy_changes + traceback logging
2026-04-28UPDATEfix: native hyperlink, Newly Licensed Business fallback, Project Cost map
2026-04-23UPDATEfix: tenancy_changes .str crash + ensure product scripts always run
2026-04-23UPDATEfix: restore likely_services secondary matching in Category-first routing
2026-04-23UPDATEfix: project cost wipeout, trade routing by Category, ghost lead filter hardening
2026-04-23UPDATEfeat: run all DELIVERABLES_MAP §1.3 + §1.4 product scripts from main.py
2026-04-22UPDATEa
2026-04-22UPDATEfix: add Permit ID + Category to slice exports; dead-lead filter in all write paths
2026-04-22UPDATEa
2026-04-22UPDATEfix: prevent street addresses from appearing in Applicant Name / Business Name columns
2026-04-22UPDATEfix: restore Address and Applicant Name mapping for license and dev permit rows
2026-04-22UPDATEfix: flatten trade_splits into deliverables/trade_splits/ (remove extra nesting)
2026-04-22UPDATEa
2026-04-21UPDATEfix: resolve pathing, pandas crash, and repo structure
2026-04-21UPDATEfix: resolve 6 static analysis critical blockers before live run
2026-04-21UPDATErefactor: reorganize repository structure and fix pathing
2026-04-20UPDATEa
2026-04-20UPDATEstop tracking claude files
2026-04-20UPDATEa
2026-04-20UPDATEa
2026-04-20UPDATEa
2026-04-20UPDATEa
2026-04-19UPDATEFix horizontal viewport shift on Calendly scroll (mobile)
2026-04-19UPDATEFix 4 mobile/infra issues: overflow, Calendly, DNC file, self-host assets
2026-04-19UPDATEFix subscriber exclusivity: one Excel file per trade+quadrant, no cross-quadrant data
2026-04-19UPDATEFix Excel logo: correct dimensions and row heights to prevent overlap
2026-04-19UPDATEFix Calendly dark theme colors and post-form scroll target
2026-04-19UPDATERebrand to Shovel Radar: logo fix, dispatcher overhaul, branding sweep
2026-04-18UPDATEFix drive uploader: switch to OAuth2 user credentials (service accounts have no Drive quota)
2026-04-18UPDATEAdd Google Drive uploader utility; gitignore credentials.json
2026-04-18UPDATEAdd launch scripts playbook with all 5 email templates
2026-04-18UPDATEAdd subscriber onboarding guide (HTML + branded PDF generator)
2026-04-18UPDATEAdd Privacy Policy and Terms of Service pages; wire up footer links
2026-04-18UPDATEAdd Google Analytics (G-29XHS0NNKD) to head
2026-04-16UPDATEa
2026-04-16UPDATEAdd brand favicons and webmanifest
2026-04-14UPDATEAdd Gatekeeper Scripts cheat-sheet to every Excel workbook
2026-04-13UPDATEq
2026-04-13UPDATEa
2026-04-12UPDATEstrategy: add comprehensive 12-step pricing & distribution model (Model F)
2026-04-11UPDATEfix: drop structurally-empty columns from all client deliverables
2026-04-11UPDATEfix: strip Socrata internal columns and ISO timestamps from licence deliverables
2026-04-11UPDATEfix: handle all-NaN Likely Services column in format_deliverable_dataframe
2026-04-11UPDATEaudit: fix Gemini prompt service pollution and chain lead scoring; sync trade_splits service list
2026-04-11UPDATEaudit: fix 6 remaining data quality and structural bugs (session 2)