Merchant Registry Watch - Business Status & KYB Alerts (SOS)
Pricing
from $400.00 / 1,000 entity watch-months
Merchant Registry Watch - Business Status & KYB Alerts (SOS)
Watch businesses across Colorado, New York and Connecticut state registries: status-change, registered-agent, name and address events on your own schedule, plus point-in-time KYB registry checks. Per-entity watch memory, event history, optional webhook. Registry evidence, not adjudication.
Pricing
from $400.00 / 1,000 entity watch-months
Rating
0.0
(0)
Developer
Paul Mikulskis
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Merchant Registry Watch turns state business-registry open data into a standing watch on the companies you care about. It does two jobs: a point-in-time registry check that returns one KYB evidence record per business (status, registered agent, addresses, formation date, jurisdiction, the exact source URL and a checked-at timestamp), and a per-entity watch-month that polls each enrolled business every day inside your own scheduled runs, diffs it against a stored snapshot, and delivers status-change, registered-agent, name and address events on each scheduled run, plus a monthly attestation row when nothing changed.
Coverage at launch is three state registries, all official open data: Colorado (data.colorado.gov), New York (data.ny.gov) and Connecticut (data.ct.gov). Out-of-state businesses that are foreign-qualified in those states appear too (in one measured Connecticut file, 15.1% of categorized registrations were foreign). The watch runs on the Apify platform, so you get API access, scheduling, integrations and run history without operating any infrastructure yourself.
What Merchant Registry Watch does
- Registry check (
mode: check): give it a list of businesses by state entity id (or by name) and get back one flat record each: legal name, status, registered agent and address, principal address, formation and dissolution dates, jurisdiction of formation, the exact Socrata source URL, and when it was checked. This is a KYB evidence artifact you can attach to a file, not a lead list. - Watch (
mode: watch): enroll a portfolio and, on every run, poll each business and compare it to its last snapshot. Changes come back as event rows with the field, the before value and the after value. A month with no change delivers one attestation row per business ("status verified current as of DATE"), so you can see what the watch fee bought. - List events (
mode: list-events): read back this watch's stored change-event history for the last N days. - Unwatch (
mode: unwatch): remove businesses from a watch.
New York has no status column in its open dataset (it is an actives-only roster), so a New York status change is detected as the business leaving the roster, with guards described below. Colorado and Connecticut publish a status field directly.
Why use Merchant Registry Watch
Payment facilitators, SMB lenders, B2B marketplaces and vendor-management teams verify a business once at onboarding and then go blind. When a merchant lapses into delinquency, is administratively dissolved, or swaps its registered agent, the risk team usually finds out at chargeback time. The enterprise tool for this ongoing surveillance is sold inside contracts with five-figure annual minimums. Merchant Registry Watch gives the same shape (portfolio-scale, multi-state, API, webhook, MCP-callable, with per-entity event history) priced for a 50 to 500 entity book. AI-agent KYB pipelines can call it as a single Apify tool to add a standing "tell me if this vendor's registration changes" primitive.
How watching works (read this before you schedule)
Checks and diffs run inside your own scheduled Apify runs. This is not a hosted daemon that wakes itself: no schedule means no polls, no events and no charges. To watch a portfolio daily:
- Run the actor once in
watchmode with your businesses and awatchName. This enrolls them and stores the first snapshot in named stores in your account. - Open the actor, go to Schedules, and add a daily schedule that runs it with the same input. That is the two-click step that makes it a standing watch.
The watch memory (snapshots, event history, per-month billing) lives in named key-value stores and a named dataset in your account, keyed by watchName, so it persists across your scheduled runs and accrues a history a fresh copy cannot backfill.
Input
| Field | Type | Notes |
|---|---|---|
mode | check | watch | unwatch | list-events | Default check. |
businesses | array of { state, entityId } or { state, name } | 1 to 1000 items. state is CO, NY or CT. entityId is that state's own id: Colorado entityid, New York dos_id, Connecticut accountnumber. A name-only entry is resolved against the registry and enrolls only on a unique exact match; an ambiguous name returns an uncharged candidate list to confirm by id. Required for check, watch and unwatch. |
watchName | string | Default default. Lowercase letters, digits and hyphens, 1 to 40 characters. Names the watch so its memory persists across runs. |
sinceDays | integer | Default 30, 1 to 365. For list-events: how many days of history to return. |
webhookUrl | string | Optional https URL that receives a POST with this run's events. Best-effort only; the dataset is the durable record. Put a secret token in the URL yourself if you need to verify the caller. |
dryRun | boolean | Default false. Preview up to 5 rows, charge nothing, write no memory. |
Worked examples
Check two businesses by id (the default input, costs $0.04):
{ "mode": "check", "businesses": [ { "state": "CT", "entityId": "2784043" }, { "state": "CO", "entityId": "20251665680" } ], "dryRun": false }
returns two check rows: the Connecticut business 2784043 and the Colorado business 20251665680, each with its current status, agent, addresses and source URL.
Resolve a business by name, then confirm by id. A name-only entry never enrolls on a guess. Input { "state": "CT", "name": "Rype L.L.C." } returns uncharged candidate rows when the name is not a unique exact match (for example both "Rype L.L.C." and "RYPE LLC" exist as distinct Connecticut businesses). Pick the right accountnumber from the candidate rows and pass it as entityId to check or watch that exact business.
Watch a portfolio:
{ "mode": "watch", "watchName": "vendors", "businesses": [ { "state": "CO", "entityId": "20251665680" }, { "state": "NY", "entityId": "4424185" } ] }
enrolls both, delivers their first snapshots, and on later scheduled runs delivers only what changed.
Output
Every row is flat and documented. The rowType field tells you what a row is: check (a point-in-time record), event (a detected change, with eventType, changedField, before, after), attestation (a no-change month confirmation), candidate (a name-disambiguation option, uncharged), truncation-marker (entities withheld at your run's charge limit, uncharged), watch-expired (an entity idle past 60 days, uncharged), poll-failed (a fetch that failed this run, uncharged) and unwatched (a removal confirmation).
| Field | Meaning |
|---|---|
rowType | What this row is (see above). |
state | CO, NY or CT. |
entityKey / displayId | The state's customer-facing id. |
legalName | Legal name. For Colorado, any status annotation the source embeds in the name is stripped. |
status / subStatus | Registry status. Always empty for New York (see below). |
formationDate / dissolutionDate | Formation date; dissolution date where the state publishes it (Connecticut). |
registeredAgent / agentAddress | Registered agent and its address. |
principalAddress | Principal or business address. |
jurisdictionOfFormation | State or territory of formation. |
statusSemantics | status-column for CO and CT; active-roster-presence for NY. |
eventType / changedField / before / after | Set on event rows: what changed and its old and new values. |
eventSource | live-diff for real diffs; historical-reconstruction for the demo section. |
checkedAt | ISO timestamp of the poll. |
sourceUrl | The exact Socrata resource this row was read from. Verify any record or event here before acting. |
billing | How the row was billed: registry-check, watch-month, unbilled or dry-run. |
You can download the dataset in JSON, HTML, CSV or Excel.
Per-state semantics
| State | Status | Notes |
|---|---|---|
| Colorado | Full status vocabulary (for example "Good Standing", "Delinquent"). | The source occasionally embeds the status inside the name string; the legal name is cleaned. Registered agent and addresses included. |
| Connecticut | status and sub_status, plus dissolution_date. | Registered-agent data comes from a companion dataset joined on the business key. If the companion is briefly unavailable, status events still deliver and the run says so. |
| New York | No status column. statusSemantics is active-roster-presence. | The dataset is an actives-only roster, so a status change surfaces as the business leaving the roster. A disappeared-from-roster event fires only after a business is absent for 3 or more consecutive daily polls, on a fresh feed whose total row count is within tolerance of the watch's baseline, and only when a targeted re-query also finds it gone. If more than 5% of your watched New York portfolio goes missing in one run, a circuit breaker marks the feed suspect and suppresses both the New York disappearance events and their charges for that run. A residual false positive is possible; verify against the source URL before acting. |
Pricing
- Registry check: $0.02 per delivered record. Also charged once per business for the first snapshot row when you enroll it in a watch. Candidate (disambiguation) rows are never charged.
- Entity watch-month: $0.50 per business per calendar month. Charged once per business per month, only after a successful poll on a fresh feed, and only inside a customer-initiated run. It covers that month's daily polls, all of that business's change events, and the monthly attestation row.
Guarantees built into the billing:
- The first calendar month of watching is free (watch-months are not charged that month; checks still charge).
- A failed poll never bills. A business whose fetch keeps failing on an otherwise fresh feed delivers uncharged notes and is billed nothing until a poll actually completes.
- No charge in a month a feed is stale. If a state's feed has not refreshed within 48 hours, that state's watch-months are deferred to a later run that month.
- Idle watches expire at 60 days. A business no run has polled for over 60 days is expired (uncharged) and stops billing.
- If your run hits its max-charge limit, remaining businesses are withheld (not polled, not billed) and a truncation-marker row names how many. They poll and charge on the next run.
Colorado also offers free single-entity email and text alerts to anyone; if you only need to watch a handful of Colorado businesses one at a time, that is the honest budget alternative. Merchant Registry Watch is for portfolio-scale, multi-state watching with an API, webhook and event history.
Demo dataset
The public demo dataset is at https://api.apify.com/v2/datasets/vTdVaA77Fl1ZTsR8R/items?format=json. It was generated by live run sZ03RoI475bRCjHFY from a clean representative check input containing one Connecticut business and one Colorado business. It shows live registry check rows with legal name, status semantics, addresses, source URL, billing marker, and checked-at timestamp.
Data sources and disclaimers
The original sources are the states' own open-data portals. Records are modified from source only by normalizing field names into the documented output schema and, for Colorado, stripping a status annotation the source embeds in the name. Every row carries the exact sourceUrl of the resource it came from.
Colorado (data.colorado.gov). Applications using this data must carry the state's disclaimer verbatim:
The data made available here has been modified for use from its original source, which is the State of Colorado. THE STATE OF COLORADO MAKES NO REPRESENTATIONS OR WARRANTY AS TO THE COMPLETENESS, ACCURACY, TIMELINESS, OR CONTENT OF ANY DATA MADE AVAILABLE THROUGH THIS SITE. THE STATE OF COLORADO EXPRESSLY DISCLAIMS ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. The data is subject to change as modifications and updates are complete. It is understood that the information contained in the Web feed is being used at one's own risk.
Connecticut (data.ct.gov). Provided as-is by the State of Connecticut with no warranty and with the state's right to discontinue the feed. Attribution: Secretary of the State. The registry dataset declares a public-domain license.
New York (data.ny.gov). Attribution: New York State Department of State. The data is provided as-is with no warranty and no claim of state endorsement.
Limitations
- Three states at launch (Colorado, New York, Connecticut), including businesses foreign-qualified in those states.
- New York signals are roster presence, not a legal status field; its disappearance semantics carry the residual false-positive posture stated above.
- Connecticut registered-agent data comes from a companion dataset; if it is briefly unavailable, agent-change detection degrades for that run while status events still deliver.
- This is a KYB evidence and trigger surface, not an adjudication. Every row carries the exact source URL; verify against it before acting on any event.
FAQ and support
Does it run automatically? Only on the schedule you create. No schedule, no polls, no charges.
Can an AI agent call it? Yes. On the Apify platform the actor is exposed as a single callable tool whose input includes the mode field.
How do I verify a record? Open the sourceUrl on the row; it is the exact state resource the record came from.
For issues or feature requests, use the Issues tab.