Pricing API
The Email Price Index is available as JavaScript Object Notation (JSON) through a public, read-only application programming interface (API). No key or account is needed.
Endpoints
| Name | Type | Required | Description |
|---|---|---|---|
/api/pricing/vendors | GET | No | The seven marketing platforms, with their checked dates, source links and GoodPostal pricing guides. |
/api/pricing/vendors/{vendor} | GET | No | Recorded plans, contact bands, monthly prices and send multipliers for one platform. |
/api/pricing/services | GET | No | The six sending services, with their checked dates, source links and GoodPostal pricing guides. |
/api/pricing/services/{service} | GET | No | Recorded plans, monthly prices, included emails, overage rates and free-tier details for one service. |
Use a slug from a list response in its detail endpoint. Amazon Simple Email Service uses amazon-ses; Constant Contact uses constant-contact. Unknown slugs return 404. Only reads are supported.
Example request
curl -H "Accept: application/json" https://goodpostal.com/api/pricing/services/sendgridExample response
The values below are illustrative examples, not current prices. Read the response's checked date and source page before using a price.
{
"license": "CC BY 4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"attribution": "Source: GoodPostal Email Price Index (goodpostal.com/email-price-index)",
"checked": null,
"source_url": "https://example.com/pricing",
"data": [
{
"service": "Example sending service",
"plan": "Example plan",
"monthly_usd": 20,
"included_emails": 10000,
"overage_per_1k_usd": null,
"free_tier_monthly_emails": 0,
"free_tier_note": "Example only",
"last_verified": null,
"source_url": "https://example.com/pricing"
}
]
}Detail rows use the same columns as the downloadable comma-separated values (CSV) files. Prices are in United States dollars. A null value means no value is recorded. List responses carry the checked date and source URL on each item; detail responses also carry them at the top level.
Rate limits and caching
The four endpoints share a limit of 60 requests per minute per Internet Protocol (IP) address. A 429 response includes a Retry-After header. Responses are cached for one hour and carry Cache-Control: public, max-age=3600. Browser reads from other origins are allowed.