Have your agent read this site
Destination Pulse records leadership changes at US destination marketing organizations (DMOs and CVBs) and publishes them as flat JSON. This page is the contract: what the data claims, what it does not, and prompts you can paste into whatever assistant you use.
This page as markdown: /for-agents.md
What this site knows, and what it doesn't
The data makes two kinds of claims, and they are not equal.
Sourced events
A person named to a seat, or departing one, each with a source link (source_url). Curated before publishing.
Detected roster changes
A machine diff of an organization's official team page between captures. Nobody has confirmed them; verify against the linked team page before acting on one.
29 organizations under weekly roster monitoring
- Arlington Convention and Visitors Bureau
- Beaumont Convention and Visitors Bureau
- Chester County Tourism (Brandywine Valley)
- Discover Albany
- Discover Long Island
- Discover Newport
- Experience Grand Rapids
- Experience Olympia & Beyond
- Experience Ruston
- Explore St. Louis
- Greater Miami Convention and Visitors Bureau
- Greater Raleigh Convention and Visitors Bureau
- Greenville Pitt County Convention and Visitors Bureau
- Little Rock Convention and Visitors Bureau
- Richmond Region Tourism
- Travel Wisconsin
- Traverse City Tourism
- Virginia Tourism Corporation
- Visit Anchorage
- Visit Baton Rouge
- Visit California
- Visit Cheyenne
- Visit Denver
- Visit Galveston
- Visit Ithaca
- Visit Knoxville
- Visit Rochester
- Visit Springfield Missouri
- Visit Tacoma Pierce County
The collector visits each monitored team page on Mondays at 11:00 UTC; a capture that changes a roster triggers a site rebuild. Sourced events are added as announcements surface. A week with no changes leaves every file exactly as it was — judge freshness by the fields below, not by when you fetched. Recorded events span Feb 2026 to Oct 1, 2026.
The contract
schemaVersion 1
The dataset ("Destination Pulse leadership changes and rosters") lives at two stable URLs. Neither URL nor any field moves or changes meaning without a schemaVersion bump.
- https://destinationpulse.mandalivia.com/data/events.json
- https://destinationpulse.mandalivia.com/data/rosters.json
https://destinationpulse.mandalivia.com/data/events.json
- schemaVersion
- Integer, currently 1. The stability promise: URLs and fields do not move or change meaning without this number going up.
- generatedAt
- The newest seen_at across all events — the date this dataset last changed. Not a build timestamp, and not a capture date: a rebuild that adds no events leaves it alone.
- events[]
- Every recorded leadership event, one object each.
- id
- Stable unique identifier for the event. A new id is a new change; an id you have seen carries the same facts it did before.
- type
- "leadership_change" — a person named to a seat — or "leadership_departure" — a person leaving one. Additive: new signals arrive as new types, never by changing an existing field.
- date
- Effective date of the role, YYYY-MM-DD or YYYY-MM — the precision the source reported, never an invented day. For date arithmetic, treat YYYY-MM as the first of that month.
- dmo_slug
- Organization key. Its pages: /org/{dmo_slug}/ and /org/{dmo_slug}.md.
- dmo_name
- Organization display name.
- person_slug
- Person key. Its pages: /people/{person_slug}/ and /people/{person_slug}.md.
- person_name
- Person display name.
- new_title
- The role taken, worded as the source words it. Present on leadership_change events only.
- last_title
- The seat vacated, worded as the source words it. Present on leadership_departure events only — a departure never claims a seat taken.
- from.org
- Previous organization, when found. Absent means not found, not none. Always empty on a departure.
- from.title
- Previous title, when found.
- source_url
- The source backing the event: a dated publication for announced events, the official page the change was observed on for detected ones. Every event has one.
- seen_at
- The date the event entered this dataset, YYYY-MM-DD.
- provenance
- "announced" — a dated publication is the source — or "detected" — the weekly scan caught the change on the org's own page. The tier of claim you are holding.
https://destinationpulse.mandalivia.com/data/rosters.json
- schemaVersion
- Integer, currently 1. Same stability promise as the events file.
- generatedAt
- When the collector last wrote this manifest — a capture timestamp, not a data-change timestamp. It moves when team pages are captured, whether or not any roster changed.
- count
- Number of organizations with a captured roster.
- rosters[]
- One snapshot per monitored organization.
- rosters[].orgSlug
- Organization key, matching dmo_slug in the events file.
- rosters[].capturedAt
- When this organization’s team page was captured. Judge roster freshness by this, per org.
- rosters[].sourceUrl
- The official team page the snapshot was captured from.
- rosters[].sourceHash
- Content hash of the capture, for change detection.
- rosters[].people[]
- Everyone listed on the team page as captured: personKey, sourceName, titles[], photoUrl, email, phone, section. Contact fields hold what the page publishes, or null; section is the page heading the person is listed under, or null.
- rosters[].recentChanges[]
- Machine-detected diffs between captures: added[], removed[], roleChanges[], each entry dated by its capturedAt. Unconfirmed — verify against the sourceUrl before acting.
Reading freshness
The two generatedAt fields mean different things. In the events file it is the newest seen_at — the date the dataset last changed. In the rosters file it is when team pages were last captured, and each capturedAt dates its own org's capture. An agent judging "is this current?" must read the one that matches the question: data recency from the events file, capture recency from the rosters file.
Dates and the 90-day window
Event dates come at the precision the source reported: YYYY-MM-DD or YYYY-MM, never an invented day. A new leader tends to re-evaluate vendors in their first 90 days, so the useful derived claim is: the window opens on the event's date (treat YYYY-MM as the first of that month) and closes 90 days later. Compute it against your own clock at read time — the published files never state where in the window an event sits, because that would go stale between rebuilds.
License
The dataset is © Mandalivia and free to access and use, including by automated agents: fetch it, cache it, and serve what it says to your users, with attribution to Destination Pulse — a link where the medium allows.
Republishing the dataset itself, redistributing it in bulk, reselling it, or building a competing dataset from it requires permission. These terms may change for future data; data already published stays under the terms it shipped with.
Prompts to paste
Works in any assistant
The unit here is a prompt, not documentation. Each block works as-is in any assistant that can fetch a URL.
One-shot weekly summary
Paste this into a fresh session for a read of the whole feed.
Fetch https://destinationpulse.mandalivia.com/data/events.json — field meanings are documented at https://destinationpulse.mandalivia.com/for-agents.md. Summarize the recorded leadership changes at US destination marketing organizations: for each event, the person, the new title, the organization, the effective date, and the source link. Treat a YYYY-MM date as the first of that month. Flag events whose effective date falls within the last 90 days — a new leader tends to re-evaluate vendors in that window. State the dataset's generatedAt so I know when it last changed.
Recurring weekly check
If your assistant runs scheduled tasks, hand it this once; otherwise paste it at the start of each week.
Every Monday, fetch https://destinationpulse.mandalivia.com/data/events.json (field meanings: https://destinationpulse.mandalivia.com/for-agents.md). Compare against the event ids you reported last time — ids are stable, so a new id is a new change. Report only the new events: person, new title, organization, effective date, and the source link. If nothing is new, say so and stop.
Cross-reference your accounts
The reason to watch the feed at all: a fresh leader at an account is a vendor-review window.
Here is my account list: [paste your organizations, one per line] Fetch https://destinationpulse.mandalivia.com/data/events.json (field meanings: https://destinationpulse.mandalivia.com/for-agents.md). Match events to my accounts by organization name, tolerating small naming differences. For each account with a leadership change effective within the last 90 days, draft a three-sentence outreach note to the new leader that names the role and effective date and cites the source link. List the accounts with no recorded change separately — no change on record is not the same as no change.
Watch one DMO
Every organization page has a markdown twin at /org/{slug}.md; the index of all pages is at /llms.txt.
Fetch https://destinationpulse.mandalivia.com/org/visit-california.md (swap the slug for the organization you care about; the index of all pages is at https://destinationpulse.mandalivia.com/llms.txt). Report the leadership changes and any detected roster changes. Detected roster changes are a machine diff of the official team page — verify against the linked source before acting on one.