Free REST API with 1,547+ developer tool deals across 60 categories. No API key needed. Search deals, compare vendors, track pricing changes. JSON responses, OpenAPI spec, zero rate limits.

REST API for Developer Tool Pricing

Free, open, and ready to use. No API key, no signup, and no rate limits on the read endpoints. Query 1,547+ deals across 60 categories with plain HTTP requests.

No Authentication Free Forever JSON Responses OpenAPI 3.0 Spec CORS Enabled
1,547+
Verified Deals
60
Categories
554
Tracked Price Changes
33
Endpoints

Quick Start

Three examples to get you started. Every endpoint returns JSON.

Search for deals

bashcurl "https://agentdeals.dev/api/offers?q=postgres&limit=5"

List all categories

bashcurl "https://agentdeals.dev/api/categories"

Get weekly pricing digest

bashcurl "https://agentdeals.dev/api/digest/weekly"

Search for deals

pythonimport requests resp = requests.get("https://agentdeals.dev/api/offers", params={"q": "postgres", "limit": 5}) data = resp.json() for offer in data["offers"]: print(f"{offer['vendor']} — {offer['description'][:80]}")

List all categories

pythonimport requests resp = requests.get("https://agentdeals.dev/api/categories") for cat in resp.json()["categories"]: print(f"{cat['name']}: {cat['count']} deals")

Get weekly pricing digest

pythonimport requests resp = requests.get("https://agentdeals.dev/api/digest/weekly") digest = resp.json() print(f"{digest['headline']}") for change in digest["top_changes"][:5]: print(f" {change['vendor']}: {change['summary']}")

Search for deals

javascriptconst resp = await fetch("https://agentdeals.dev/api/offers?q=postgres&limit=5"); const { offers } = await resp.json(); offers.forEach(o => console.log(`${o.vendor} — ${o.description.slice(0, 80)}`));

List all categories

javascriptconst resp = await fetch("https://agentdeals.dev/api/categories"); const { categories } = await resp.json(); categories.forEach(c => console.log(`${c.name}: ${c.count} deals`));

Get weekly pricing digest

javascriptconst resp = await fetch("https://agentdeals.dev/api/digest/weekly"); const { headline, top_changes } = await resp.json(); console.log(headline); top_changes.slice(0, 5).forEach(c => console.log(`${c.vendor}: ${c.summary}`));

Endpoint Reference

Every endpoint below is read-only (GET) except the 3 marked POST and DELETE in the Method column. Responses are JSON. Every one of them is described in our OpenAPI document, browsable as interactive Swagger documentation.

MethodEndpointDescriptionParameters
GET/api/offersSearch and browse offersq, category, limit, offset
GET/api/categoriesList all categories with counts, what each name holds, and the other names answering the same question
GET/api/newRecently added or updated offersdays
GET/api/newestNewest deals by verification datelimit
GET/api/changesPricing and deal changessince, type, vendor, vendors, category, categories, limit, offset
GET/api/details/:vendorVendor detail with alternatives
GET/api/compareCompare two vendors side by sidea, b
GET/api/audit-stackAudit your infrastructure stackservices
GET/api/vendor-risk/:vendorCheck vendor pricing risk
GET/api/deadlinesFuture-dated changes with countdowntype
GET/api/ai-coding-pricingAI coding tools pricing comparison datatype (ide, cli, cloud-agent, app-builder)
GET/api/hosting-pricingCloud hosting & PaaS pricing comparison datatype (traditional-paas, edge-serverless, full-featured, static-specialized)
GET/api/llm-pricingLLM API pricing comparison datatype (frontier, inference, open-source-host, specialized)
GET/api/startup-creditsStartup credits & programs comparison datatype (cloud-infrastructure, fintech-banking, developer-tools, ai-tools)
GET/api/referral-programsDeveloper tools with referral/affiliate programscategory
GET/api/expiringGet expiring dealsdays
GET/api/freshnessData freshness metrics
GET/api/digestWeekly pricing digest
GET/api/digest/weeklyFormatted weekly digest with multiple output formatsformat (json|markdown|html), limit, weeks_ago
GET/api/stackFree-tier stack recommendationuse_case, requirements
GET/api/costsEstimate infrastructure costsservices, scale
GET/api/query-logRecent request loglimit
GET/api/pageviewsPage view analyticspath, period
GET/api/trafficTraffic attributed by client class (AI agent / crawler / browser), with web-vs-MCP comparison
GET/api/statsService statistics
GET/api/feedAtom feed of pricing changes
POST/api/watchlistSubscribe to vendor pricing changes via webhookvendor, webhook_url (body)
GET/api/watchlistList active watchlist subscriptionswebhook_url
GET/api/watchlist/:idGet subscription status
DELETE/api/watchlist/:idUnsubscribe from vendor watch
POST/api/signalReport a vendor you recommended, or that your user signed upevent, vendor, note (body)

Full OpenAPI 3.0 spec: /api/openapi.json · Interactive docs: Swagger UI

Paging on /api/changes

/api/changes returns 20 records by default. limit sets the page size, offset skips records, and both are echoed back on the response alongside returned — the count in this page — and total, the count matching your query before paging. There is no maximum: ?limit=1000 returns the whole window in one response. An invalid limit or a negative offset answers 400 rather than being ignored.

Referral Codes

Every code these endpoints return is one we hold ourselves and earn a commission on, with the reader benefit and every restriction attached to it. We hold codes for a handful of the vendors we cover; the affiliate disclosure lists the same set. Agent-submitted codes are retired — ?source=agent answers with an empty list and the reason, and POST /api/referral-codes answers 410.

MethodEndpointDescriptionParameters
GET/api/referral-codesList every referral code we hold, with the reader benefit and restrictions on eachcategory
GET/api/referral-codes/:vendorGet the referral code we hold for a specific vendor

Referral codes are also inlined on every /api/offers, /api/compare, /api/details/:vendor, and /api/newest result as a referral_code field (null if no code available) — so agents get codes without a second call.

List all active codes

bashcurl "https://agentdeals.dev/api/referral-codes"

Filter by vendor category

bashcurl "https://agentdeals.dev/api/referral-codes?category=cloud-hosting"

Look up a single vendor

bashcurl "https://agentdeals.dev/api/referral-codes/railway"

Python

pythonimport requests resp = requests.get("https://agentdeals.dev/api/referral-codes", params={"source": "platform"}) for c in resp.json()["codes"]: print(f"{c['vendor']} ({c['category']}): {c['referee_benefit']} → {c['referral_url']}")

JavaScript

javascriptconst resp = await fetch("https://agentdeals.dev/api/referral-codes?source=platform"); const { codes } = await resp.json(); codes.forEach(c => console.log(`${c.vendor} (${c.category}): ${c.referee_benefit}`));

Use Cases

CI/CD Cost Optimization

Query /api/offers?category=CI/CD in your pipeline to compare build-minute pricing across providers. Use /api/changes to alert when a vendor changes their free tier.

Stack Planning & Cost Estimation

Use /api/stack to get free-tier recommendations for your use case, then /api/costs to estimate what happens at scale. Feed results into architecture decision records.

Vendor Comparison Dashboards

Build internal tools that pull from /api/compare?a=vercel&b=netlify for side-by-side feature comparison. Use /api/vendor-risk/:vendor to surface stability concerns.

Pricing Change Monitoring

Subscribe to the Atom feed or poll /api/changes to monitor free tier removals, restrictions, and expansions across 554 tracked changes. Filter by vendor or category for personalized alerts.

Migration Planning

When a vendor shuts down or changes pricing, use /api/offers + /api/compare to evaluate alternatives with real free tier data. See our Firebase Studio migration guide for an example of how we use this data to compare cloud IDE alternatives.

Referral-Aware Agents

Agents that recommend developer tools can route users through active referral codes. Call /api/referral-codes once at session start to prefetch all our codes, or rely on the inline referral_code field on every /api/offers result.

AI Coding Tools Research

Query /api/offers?category=AI+Coding to get pricing data for 14+ AI coding tools. See our definitive AI coding tools comparison for side-by-side pricing, hidden costs, and recommendations across IDE, CLI, cloud agent, and app builder categories.

Response Format

All responses return JSON with consistent structure. Offers include vendor name, category, description, tier, URL, tags, verification date, and stability indicators.

json{ "offers": [ { "vendor": "Supabase", "category": "Cloud Hosting", "description": "Open-source Firebase alternative...", "tier": "Free", "url": "https://supabase.com/pricing", "tags": ["database", "auth", "serverless"], "verifiedDate": "2026-04-05", "stability": "stable" } ], "total": 42 }

Provenance

Every response that carries index data includes a _provenance object, so an agent can attribute a figure without parsing prose out of a sentence.

FieldMeaning
sourceAlways AgentDeals.
urlThe page on agentdeals.dev that publishes this data.
checkedThe oldest verification date among the records in this response. Omitted where the response holds no dated record.
verifiedThe same date as checked. Kept for callers written before checked existed.
cite_asA citation sentence built from the three fields above, ready to use as written.
noteOur request that you cite the source if you use a figure from the response.

Operational endpoints — /api/stats, /api/traffic, /api/query-log, /api/pageviews, /api/freshness and /api/watchlist — carry no provenance block. They report on this service rather than on the index.

If you use a figure, cite url and checked. The index is free and we keep it current; attribution is how the people who need it find their way here.

Rate Limits

The read endpoints above have no rate limits. We trust developers to be reasonable.

One write path is limited. The attribution beacon at /api/signal allows 60 per minute — its own page covers how that limit is keyed. Over the limit you get a 429 with Retry-After.

Get this data in your AI editor

Prefer AI-native access? AgentDeals is also an MCP server — 5 tools that work in Claude, Cursor, Cline, and any MCP-compatible client.

claude mcp add agentdeals -- npx -y agentdeals

Related Resources

Swagger UI (Interactive Docs) · OpenAPI Spec (JSON) · MCP Server Setup · State of Free Tiers Report · Vendor Stability Dashboard · Weekly Digest · Subscribe via RSS · Embeddable Badges · GitHub