Track Free-Tier Changes Automatically
Know when a free AI tier you rely on changes or ends: email alerts, RSS, the changes API, signed webhooks, a CI check and MCP, with their real delays.
- Time
- 5 to 30 minutes, depending on the channel
- You need
- Email alerts and RSS: nothing but an email address or a feed reader · Webhooks: a free aifree.dev API key and a public HTTPS endpoint · CI check: Node 18+ in the CI image for `npx aifree check` (the GitHub Action is not published yet)
- Last checked
Free tiers change without notice: limits shrink, a card becomes required, a credit program closes. aifree.dev records every change to its catalog as an event - listed, verified, change detected, terms updated, expired, relisted, incident, incident resolved - and publishes the same log through several channels. This guide lines them up from least to most effort, with examples checked against the live API docs on 2026-10-18, and says plainly how fast each one is.
Pick a channel
| You want | Channel | Effort | What arrives |
|---|---|---|---|
| An email when one offer changes | "Alert me" on the offer page, cadence Instant | 1 minute | Terms updated, expired, relisted, incident and incident resolved, for the offers, hubs or countries you follow |
| A weekly summary | The same alert, cadence Weekly | 1 minute | One Sunday email, only in weeks where something changed |
| Every event in a reader | RSS feed | 1 minute | The newest 100 events, filterable by kind or hub |
| Data for a script or dashboard | Changes API | 5 minutes | JSON events since a date, no key needed |
| A push into your own system | Webhooks | 30 minutes | A signed POST per event, with retries and replay |
| A failing build when a tier you use ends | A curl + node step in CI over the changes API | 15 minutes | Exit code 1 and the matching events |
| An AI agent that can answer "what changed" | The hosted MCP server | 2 minutes | A recent_changes tool and a changes resource |
Email alerts (least effort)
Every offer page, category hub, comparison, top chart and country page has an Alert me button. Enter an email, confirm it (double opt-in), then pick a cadence on the manage page linked from every email:
- Instant: an email when an offer you follow has its terms updated, expires, is relisted, or has an incident opened or resolved.
- Weekly digest: Sunday morning, only when something changed; new, expiring (within 14 days), changed and expired offers for your topics.
- Nothing: keeps your topics and sends no email.
Browser push notifications are built (the bell in the header) but not switched on in production yet, so use email for now.
RSS: the whole changelog in a reader
Subscribe to https://aifree.dev/changes/rss.xml. It carries the newest 100 events; add ?kind= to follow one kind, for example /changes/rss.xml?kind=expired or ?kind=terms_updated. Kinds: listed, verified, changed (change detected), terms_updated, expired, relisted, incident, incident_resolved. An item for an offer that has since expired links to its category hub, with "Expired - see alternatives" in the description. To follow one category, add ?hub= with a hub slug: free-ai-coding-tools, free-api-credits, student-ai-deals, startup-ai-credits, free-ai-image-tools, free-ai-audio-tools or free-ai-video-tools, for example /changes/rss.xml?hub=free-ai-coding-tools for coding tools only; it combines with ?kind=, and each hub page links its own feed. The same list is browsable on the changelog page, where you can also filter by hub.
Changes API: JSON for scripts
GET /api/v1/changes returns the same log as JSON, newest first. No key is needed (600 requests per 15 minutes; a free key raises it to 6,000):
curl -s 'https://aifree.dev/api/v1/changes?since=2026-10-01&kind=expired,terms_updated'Parameters: since=YYYY-MM-DD, kind= (comma list of the kinds above), hub= (one hub slug, as for the RSS feed), page, limit. Each record is { id, slug, url, kind, at, source, note, offerStatus, alternativesUrl }: source is human, monitor, community, probe or ai; offerStatus is the offer's current status and alternativesUrl is its category hub when it has expired (null while it is live). Responses carry an ETag, so a poller can send If-None-Match and get a cheap 304. The full contract is in the OpenAPI spec.
Webhooks: a signed POST per event
Get a free API key on the developers page, then register an HTTPS endpoint, either in the webhooks console or with the API:
curl -s -X POST https://aifree.dev/api/v1/webhooks \
-H "Authorization: Bearer $AIFREE_API_KEY" \
-H 'content-type: application/json' \
-d '{"url":"https://example.com/hooks/aifree","kinds":["terms_updated","expired"],"format":"json"}'kinds empty or omitted means every kind; format is json (the signed payload) or discord / slack (a ready-made message for an incoming-webhook URL, handy for a team channel; an expired message also says "See alternatives" with the category page to look at instead). Each delivery is a POST with X-Aifree-Event: offer.<kind>, X-Aifree-Delivery (the event id) and X-Aifree-Signature: t=<unix seconds>,v1=<hex>, an HMAC-SHA256 of t + "." + body with your endpoint secret; the console has Node and Python verifiers. The JSON body is { id, type, createdAt, data: { slug, kind, source, note, diff, offer, offerStatus, alternativesUrl } }, where diff lists the changed fields for terms_updated. New fields are only ever added, so ignore keys you do not know.
Answer with a 2xx within 10 seconds. A failed delivery is retried after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours (6 attempts in all); 20 failures in a row pause the endpoint until you delete and register it again. Every delivery can be replayed from the console or with POST /api/v1/webhooks/deliveries/{id}/replay. Limit: 5 endpoints per key.
Fail CI when a free tier you use changes
The aifree CLI does it in one step: npx aifree check groq-free-tier google-gemini-developer-api-free-tier reads the offers and the last 30 days of changes and fails on an expiry or incident. With no slugs it reads an .aifree.yml offers: list, or detects the SDKs in package.json; --markdown prints a table for the pull request. The GitHub Action is not published yet. Without Node, the changes API does the core check with curl. List the offers your project depends on (the slug is the last part of the offer URL) and fail the job when one of them expired or had an incident in the last 30 days:
since=$(date -u -d '30 days ago' +%F) # GNU date, as on ubuntu-latest
curl -fsS "https://aifree.dev/api/v1/changes?since=$since&kind=expired,incident&limit=200" |
node -e 'const want = new Set(process.argv.slice(1)); const hits = JSON.parse(require("fs").readFileSync(0, "utf8")).data.filter((c) => want.has(c.slug)); for (const c of hits) console.log(c.kind, c.slug, c.at); process.exit(hits.length ? 1 : 0)' google-gemini-developer-api-free-tier groq-free-tierIt prints each matching event and exits 1, which fails the step; add terms_updated to kind to be strict. The CLI's check also warns on other events, such as a terms update.
Ask an agent: the MCP server
The hosted MCP server needs no install or key:
claude mcp add --transport http aifree https://aifree.dev/mcpThen ask "what free AI offers expired this week?". The recent_changes tool takes since (YYYY-MM-DD), kind, hub and limit (up to 50), and aifree://changes lists the latest 50 events. Both are built from the offer rows at day granularity (listed, verified, change detected, expired), so they do not show terms updates or incidents; use the changes API or webhooks for those. Clients that only run local servers can use the stdio proxy npx -y @aifree/mcp instead of the hosted URL.
How fast is "automatically"?
- Detection is nightly. A monitor reads every offer's pricing page once a night (scheduled at 03:00 UTC) and records "change detected" when the pricing text differs from the night before. Pages behind a login are reported as blocked unless the offer has a public pricing page to watch instead, and the monitor never expires an offer on its own.
- A person rules on each finding. "Change detected" means the page text moved, not that the free tier changed. A person checks it and records "terms updated" (with the changed fields) or "expired" only when the facts changed, so instant emails, which skip "change detected", can come a day or more after the vendor's change.
- Scheduled jobs can run late. The jobs run on GitHub Actions; jobs scheduled every 5 minutes have in practice run every 2 to 5 hours. A webhook's first attempt is sent as soon as the event is recorded, but its retries ride that job, so a retry can arrive hours late.
- Caching. The RSS feed and the API are cached for up to 5 minutes.
None of these channels replaces reading the vendor's terms before you depend on a free tier in production.
Frequently asked questions
- How quickly will I hear about a free-tier change?
- The monitor checks pricing pages nightly, and a person confirms each finding before it becomes a terms update or an expiry, so expect hours to a couple of days after the vendor changes its page. A webhook goes out as soon as the event is recorded; retries can lag by hours.
- Do I need an API key?
- Not for RSS, email alerts, the MCP server or reading GET /api/v1/changes (600 requests per 15 minutes). Webhooks need a free key from the developers page, which also raises the API limit to 6,000 requests per 15 minutes.
- What is the difference between "change detected" and "terms updated"?
- "Change detected" is the nightly monitor noticing that the pricing text changed. "Terms updated" is a person confirming that the offer’s facts changed, with the changed fields listed. Instant emails are sent for terms updates, not for detections.
- Can I get alerts in Slack or Discord?
- Yes: register an incoming-webhook URL from Slack or Discord in the webhooks console with the slack or discord format, and every matching event is posted to that channel.
- Can I use the aifree GitHub Action today?
- Not as a published action: it has no Marketplace listing and its source is not public yet. The aifree CLI is on npm, so run `npx aifree check` in a CI step instead (or poll the changes API with curl; this guide has both).
Sources
Steps and limits were checked against these official pages.
More guides
- How to Get a Free Gemini API Key
- How Students Can Get ChatGPT Plus Free
- How Students Can Get Google Gemini (AI Pro) Free
- How to Use an AI Coding Agent for Free
- How to Get a Free GPU for AI
- How to Apply for AI Startup Credits
- How to Get Free Claude API Credits
- How to Get a Free Groq API Key
- Free AI Image Generation: In the Browser and by API
- Free OpenAI API Access in 2026: What's Actually Free
- Free Embeddings and Reranking APIs in 2026
- Free Text-to-Speech APIs in 2026
- Free Speech-to-Text APIs in 2026
- Free AI Video Generators in 2026
- Free Image Generation APIs in 2026
- Free Web Search APIs for LLM Agents in 2026
- Free Vector Databases for RAG in 2026
- Free DeepSeek API in 2026: What Is Actually Free
- OpenRouter Free Models: Limits, Credits and API Setup
- Free Hugging Face Inference: Credits, ZeroGPU and Spaces
- Free AI APIs With No Credit Card in 2026
- How to Run AI Locally for Free
- Free Vision APIs: Read Images and Screenshots for Free
- Free Reasoning Model APIs: Thinking Models for Free
- Free AI courses