Business Change Monitor: closures, hours, contacts
Pricing
from $0.50 / 1,000 business checkeds
Business Change Monitor: closures, hours, contacts
Monitor PUBLIC business listings and get an event the moment one closes, moves, or changes hours, phone, website, or category. Pay only per detected change.
Local Business Closure & Change Monitor (OSM)
Monitor local businesses for closures and changes. Get a structured event the moment a
business closes, moves, or changes its hours, phone, address, website, or category —
sourced from OpenStreetMap (free, public, datacenter-friendly). Point it at a list of
businesses or a whole city/region, run it daily or weekly. Billing is pay-per-event: a
small business_checked fee for every business checked each run, plus change_detected
when something actually changes (see Billing).
What it does
- Fetch current public data for each business.
- Normalize to one shape regardless of source.
- Snapshot to the key-value store, keyed by business id.
- Diff against the previous snapshot.
- Bill + emit: charge one
business_checkedper business checked, and emit + charge onechange_detectedper real change (changed_field,old_value,new_value,confidence,detected_at).
No-change runs still produce a dataset item. If a run detects zero changes, it writes exactly one status item —
— to the default dataset. This item is not billed as{ status: 'no_changes', businesses_checked, source, checked_at }change_detected; it exists only so the dataset is never empty. Don't be surprised to see it mixed in with real change events.
Data source & the margin rule
Default source is OpenStreetMap (Overpass API) — free, datacenter-proxy-friendly, no anti-bot. That matters: residential proxy (~$12.5/GB) is the #1 thing that kills margin on a change-monitor. This Actor ships a pre-flight margin guard that estimates cost vs revenue before doing any work and rejects any run projected below the margin floor (default 50%), logging which cost driver dominated. Only public business listings are read — no login-gated data, no personal-data resale, no anti-bot circumvention.
Billing
Pay-per-event only — two events, no rental, no flat fee, no other payment method (as required by the Apify Store):
business_checked— $0.0005 per business checked, every run, whether or not it changed.change_detected— $0.02 per change found.
For example, a 2,000-business weekly run costs $1.00 in check fees (2,000 × $0.0005) plus $0.02 per change found.
Input (.actor/INPUT_SCHEMA.json)
urls_or_businesses— OSM ids (node/123,way/456), 500–10,000; or leave empty and set…region_bbox—"south,west,north,east"to auto-discover a whole areaosm_category_filter— one vertical, e.g.amenity=restaurant,amenity=cafe,shop=hairdressermonitoring_interval—daily|weekly(drives the guard's expected change rate)change_types— any ofrating, review_count, hours, phone, address, website, category, disappearedprice_per_event_usd,price_per_business_checked_usd,margin_floor— guard tunables
Pick one vertical × one region (e.g. independent cafés in Austin). General-purpose is a crowded, low-margin category.
Modes
- Scheduled run (default): batch-check a list/region, emit changes.
- Standby (low-RAM HTTP):
GET /?id=node/123&category=amenity=restaurant&change_types=hours,phonefor on-demand single-business checks — billed on RAM × wall-clock, cheap when idle.
Local dev
npm install && npm run buildnode test/margin_guard.mjs # margin-guard unit tests (no platform needed)