Listing Change Watcher
Auto-triage MLS alert emails. Classify what changed, log to a Sheet, digest to the agent.
What it does
Every ~30 minutes during work hours:
- Reads new Gmail messages with the label
mls-alerts(set by your Gmail filter). - For each message, asks Claude to extract: which property, what changed (price drop / new listing / sold / etc.), urgency.
- Appends the classification to a
ListingAlertsGoogle Sheet. - Relabels the email
mls-alerts-triagedso the next poll skips it. - Sends the agent a digest of newly-classified alerts.
Why this matters
MLS alert emails pile up. By the time you read them, the "new listing in your saved search" is already shown 3 times. This batches the noise into a structured Sheet that's searchable and de-duplicated, and surfaces the high-urgency items (a tracked property's price drop, a new listing matching a buyer's criteria) in the digest.
Setup
1. Gmail labels + filter
In Gmail:
- Create label mls-alerts.
- Create a filter that applies it to your MLS-system emails. Common matchers:
- From contains the MLS sender ([email protected], [email protected], bright-mls, etc.)
- Subject contains "Listing Alert", "Price Change", "Status Change", "New Listing", or your MLS's terminology
- Create label mls-alerts-triaged.
2. Service account Gmail access
The service account needs to read AND modify your mailbox. In Google Workspace admin:
- Enable domain-wide delegation.
- Grant scopes: gmail.readonly + gmail.modify + spreadsheets.
- Set credential's account field to the mailbox owner's email (impersonation target).
3. Sheet
Tab ListingAlerts with header:
| msg_id | received_at | property | change_type | summary | urgency | raw_subject | status |
|---|---|---|---|---|---|---|---|
4. Credentials + placeholders
Replace in workflow.yaml:
- <<GOOGLE_WORKSPACE_CREDENTIAL>>
- <<ANTHROPIC_CREDENTIAL>>
- <<LISTING_ALERTS_SHEET_ID>>
- <<AGENT_PUBLISHER>>
5. Schedule
Every 30 minutes during work hours. Adjust based on your MLS's alert volume.
AI cost
~500 tokens prompt, ~120 tokens response per email with Claude Sonnet 4.6. A busy agent getting 50 alerts/day = ~$0.20/day in Anthropic costs.
What it won't do
- Recommend showings or write offers (informational only).
- Open MLS listings directly (no MLS API integration — runs off the email alerts you already subscribe to).
- Filter out duplicates within the same digest if the MLS sends multiple alerts for the same property (would require additional dedupe logic).