← Blog

Reference design

Agent-run billboard photo audits: a ZenSched reference design

• ZenSched Team

The buyer emails Monday: did every face in the Dallas flight go up, and can you send photos the plant will accept? Your spreadsheet has the face list. The auditor’s camera roll is in iCloud. The media owner wants a trail they can forward, not a zip of mismatched filenames. What if an AI assistant could take that pasted face list, schedule posting and mid-flight visits face by face, GPS-check the auditor in at the shoulder, capture a Proof Record with the creative readable and a damage note, and tell you which faces mismatched the brief — without putting billing contacts, access notes, or auditor pay into a vendor cloud, and without pretending to be Geopath, Veridooh, or the plant’s official proof-of-play certificate?

This reference design shows how a 1–8 auditor shop (independent posting-proof vendor, in-house OOH team, or street-furniture subcontractor) can deploy an AI agent using ZenSched as the live visit of record (with a Proof Record on the phone) and a local SQLite database for campaigns, faces, visit QA, buyer invoices, and auditor payouts.

Honest framing: photo log, not the official PoP certificate

Read this before you clone the kit.

  • ZenSched is not a legal posting affidavit, not Geopath / MRC audience measurement, not Veridooh / Seedooh / Broadsign proof-of-play, and not the media owner’s official PoP certificate. The Proof Record is internal posting proof (creative up, matches brief, damage) — not a signed affidavit, not a play log for digital, and not what you hand a ratings auditor.
  • It is not a burned-in GPS stamp on the JPEG. ZenSched stores punch time and distance from the pin on the server. If a buyer wants readable date/time on the image itself, the auditor still uses a camera overlay or opt-in "stamp_photos": true on the photo field.
  • It is not an inventory / avail / proposal system. Faces here are places you send an auditor to, not a plant book or vinyl log.
  • Shoulder pull-offs, ladder notes, gate codes, buyer billing contacts, and auditor pay handles stay only in local SQLite. ZenSched locations use the face label — SL-DAL-1102 N — plus the street intersection. The creative name may appear on the event title so the auditor knows what should be on the board.
  • Creative photos go to ZenSched (US-hosted). Global buyers should note where photos are stored before outreach.
  • No signature field on purpose. On ZenSched a signature replaces Submit — submitting the Proof Record must not look like swearing a legal document.
  • Android on Google Play; iOS on App Store. US and UK auditors skew iPhone; LATAM and Gulf skew Android.

The kit’s SKILL.md makes that split a hard rule the AI will refuse to break.

The problem: mismatches discovered on invoice day

Small posting-proof shops already have a stack: ODK or a custom app if the buyer mandated it, FotoFetch-style tools if the plant pays for them, otherwise a spreadsheet, WhatsApp status, and Google Maps pins. The weekly loop is the same whether one auditor hits twelve bulletin faces or four contractors split a national flight:

  1. Did every face in the flight get a posting proof on schedule — not reconstructed from texts on Friday?
  2. Does the creative match the brief, with something the buyer can forward when it does not?
  3. Pay auditors per approved visit without rebuilding the sheet from camera rolls.
  4. Catch a dark digital or a partial posting before you invoice, not after the make-good call.
  5. Answer “show me I-35 Commerce last Tuesday” with punch times and a photo, not a story.

Not on that list: Geopath ratings, digital play logs, or a proposal engine.

The solution: split responsibility between ZenSched and local data

  • ZenSched: Live pin per face (bulletin, poster, shelter, transit), GPS-verified check-in and check-out on each audit shift (geofence enforced via policy), auditor app + push, Proof Record (creative photo up to 2, matches brief Yes/No/Partial, damage note). One event per face per campaign flight (≤60 days); the kit splits longer bookings into multiple campaign rows locally.
  • Local SQLite database: Campaigns with flight dates and fees, face cache with access notes, visit queue (posting, mid-flight, take-down, make-good), proof summaries, QA flags, buyer invoices, auditor payouts. Links to ZenSched location, event, shift, and submission IDs.

The agent orchestrates both: it reads open visits from SQLite, creates shifts on ZenSched, and writes verified punches plus Proof Record answers back for the exception report and the invoice.

Split responsibility architecture for billboard photo audits: ZenSched holds GPS and Proof Records, local SQLite holds access notes and buyer billing

Privacy: access notes and billing never cross

The intersection address and face pin have to go to ZenSched so the geofence works. Shoulder pull-offs, ladder requirements, parking notes, buyer AP emails, and auditor Venmo handles stay in local tables. If you ask the agent to put a shoulder note in a ZenSched field, it should refuse. Give access instructions to auditors yourself.

Day-to-day workflow

  1. You to agent (plain English): Paste the flight — advertiser, dates, creative, fees, and face list with plant codes and intersections.
  2. Agent writes SQLite: Upserts the campaign and faces, keeps access notes local, geocodes new faces once.
  3. Agent creates the flight on ZenSched: One event_create per face for the window, form_assign for the Proof Record, open visit rows from the quota (posting + mid-flight, etc.).
  4. You to agent: “Give Jordan the two Dallas posting visits Thursday morning.” Agent assigns visits and shift_create for each stop.
  5. The auditor does the work: GPS check-in at the face, Proof Record (creative photo, match brief, damage), check out; next face.
  6. Pull results: “Pull this week’s proofs.” Agent lists mismatches and late punches first, caches summaries locally.
  7. Money: “Invoice Acme for approved visits” and “Run auditor pay for September.” Plain-text invoice — official plant PoP or affidavit stays in whatever system the contract names.

No dashboards. No asking you to run SQL. Talk to the agent.

Billboard audit workflow from pasted face list through GPS check-in, Proof Record, and buyer invoice

Proof Record on the phone

The auditor opens the ZenSched mobile app, checks in at the face, then fills the Proof Record before leaving:

  • Creative up (photo, up to 2 images)
  • Matches brief (Yes / No / Partial)
  • Damage (optional note — tears, dark panel, graffiti)

No signature. Official Geopath / plant PoP still happens in the systems the contract names.

Setup summary

Getting started takes about 15 minutes:

  1. Install an MCP client: Claude Desktop, Cursor, or Muse Code.
  2. Connect ZenSched MCP: Add https://mcp.zensched.com/mcp to your MCP config.
  3. Connect easy-sqlite-mcp: Point SQLITE_PATH at a local billboard.db on an encrypted, backed-up folder.
  4. Paste the reference skill: The zensched-billboard-kit includes SKILL.md, schema.sql, and a quickstart. Load the schema once (one statement per execute).
  5. Create your ZenSched account: Call zensched_guide, then account_create for a zsc_ key. Invite auditors at $0.25 each once.
  6. Fund when needed: Metered GPS, geocode, and form reads draw from prepaid balance. The $5 activation deposit is credited to your account.

Highway bulletin faces need a wider policy radius (policy_update, 150–250 m is typical for shoulder pull-offs) — not org-wide remote_checkin for walked-up audits. If you also run drive-by phone photos, use a second brand/policy for those campaigns only.

Worker app: Android on Google Play and iOS on the App Store.

For step-by-step details, see the ZenSched quickstart and the billboard kit.

Metering: what you pay for

ZenSched uses transparent per-action pricing (see pricing):

  • GPS check-in/check-out: $0.10 each (about $0.20 per visit)
  • Address geocoding: $0.03 per new face (once)
  • Worker invite: $0.25 per auditor (once)
  • Form submission reads: $0.05 basic / $0.15 with photos — read once, cache locally

Worked example from the vertical pitch: 800 face visits/month (posting + mid-flight across a mixed flight), GPS punch in and out on every visit plus one photo Proof Record each.

PatternApprox. monthlyPer visit
GPS + photo Proof Record (typical)about $282about $0.35
GPS onlyabout $160about $0.20

Read the incumbent comparison honestly. At 800 visits, ZenSched is above lightweight ODK-style tooling on price but wins when enforced GPS + AI dispatch is the product — not a discount field-data seat. Geopath / Veridooh / Broadsign win certified PoP and play logs; FotoFetch wins when the buyer already bought that workflow. The case here is shoulder-GPS + a local exception report, not replacing the plant’s official certificate.

What you get

  • Geofenced check-in and check-out per face
  • Proof Record: creative photo, match brief, damage note
  • Local mismatch / damage extract for the buyer pack
  • AI dispatch from plain English
  • Pay per visit, no seats

What you don’t get

  • No Geopath / MRC audience measurement
  • No Veridooh / Broadsign digital play logs
  • No legal posting affidavit or plant PoP certificate
  • No avail / proposal / plant inventory system
  • Not a replacement for the buyer’s mandated ODK program when that is the contract

Who this is for

Ideal for: Independent posting-proof vendors, 2–20 auditor networks on spreadsheet dispatch, in-house OOH teams that need a face trail the buyer can read.

Not for: Shops whose only deliverable is a Geopath-certified measurement, digital networks that bill on play logs only, or buyers that already mandate a single PoP portal end to end.

Get started

Ready to build your own workflow?

Clone the reference kit and connect ZenSched to your AI agent.