magazine APImagazine.ad ↗
Search the magazine.ad network of 172+ local and regional magazines across the UK, Poland, and Ireland by name, location, or proximity via one endpoint.
What is the magazine API?
The magazine.ad API exposes the full directory of over 172 live local and regional magazines in the magazine.ad network across the United Kingdom, Poland, and Ireland through a single search_magazines endpoint. Each result includes the magazine's name, slug, website URL, city, region, ISO country code, and geographic coordinates, with optional filtering by keyword, country code, or distance from a latitude/longitude origin.
curl -X GET 'https://api.parse.bot/scraper/3b66e164-bee0-4370-a32a-1b4e43c76621/search_magazines?country_code=GB' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace magazine-ad-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: magazine.ad directory — search, filter, and geo-locate magazines."""
from parse_apis.magazine_ad_api import MagazineAd, CountryCode, InputFormatInvalid
client = MagazineAd()
# Browse all UK magazines; limit= caps total items yielded.
for mag in client.magazines.search(country_code=CountryCode.GB, limit=5):
print(mag.name, mag.region, mag.website_url)
# Full directory metadata for the same country filter.
directory = client.directories.search(country_code=CountryCode.GB)
print(f"{directory.matched_count} matched out of {directory.network_total} total")
# Geo search: magazines within 25 km of Manchester city centre.
nearby = client.magazines.search(latitude=53.4808, longitude=-2.2426, radius_km=25, limit=10)
first = nearby.first()
if first is not None:
print(first.name, first.city, f"{first.distance_km} km away")
# Text search narrowed by query.
for mag in client.magazines.search(query="london", limit=3):
print(mag.slug, mag.name, mag.directory_eligible)
# Graceful handling of bad coordinate input.
try:
client.directories.search(latitude=999, longitude=0)
except InputFormatInvalid:
print("rejected: coordinates out of range")
print("exercised: magazines.search / directories.search")
Returns the live magazines in the magazine.ad network directory, one row per magazine with its slug, name, website domain and URL, city (may be null), region, ISO country code, latitude/longitude, type and directory eligibility. With no inputs it returns the whole directory (172 titles at build time; network_total carries the site's own count) in one round trip, sorted as the site lists them (alphabetical by name). Optional controls are applied over the full directory: query is a case-insensitive substring match against name, city and region (the same rule the site's search box uses); country_code restricts to one country; latitude+longitude compute distance_km (great-circle, 2 decimals) for every row and sort ascending by distance, and radius_km (with coordinates) keeps only rows within that distance (capped at 5000). distance_km is null when no coordinates are given. A query that matches nothing returns an empty magazines array with matched_count 0 (a valid result). Invalid country codes, non-numeric coordinates, coordinates out of range, a lone latitude/longitude, or radius_km without coordinates are rejected as stale_input. There is no pagination; the directory is small and returned whole.
| Param | Type | Description |
|---|---|---|
| query | string | Case-insensitive substring matched against magazine name, city and region, e.g. a town name like london or a magazine name fragment. Omitted = no text filter. |
| latitude | number | Origin latitude in decimal degrees (-90..90). Must be supplied together with longitude; enables distance_km and distance ordering. |
| longitude | number | Origin longitude in decimal degrees (-180..180). Must be supplied together with latitude. |
| radius_km | number | Keep only magazines within this great-circle distance in kilometres of the given latitude/longitude. Positive; values above 5000 are clamped to 5000. Requires latitude and longitude. |
| country_code | string | Restrict results to one country by ISO 3166-1 alpha-2 code as used by the site's country filter chips. Omitted = all countries. |
{
"type": "object",
"fields": {
"magazines": "array of magazine rows: slug (stable site identifier), name, domain, website_url, city (town/city, null when the site records none), region, country_code (ISO alpha-2), latitude, longitude (decimal degrees), type (site classification, e.g. regional), directory_eligible (boolean), distance_km (km from the supplied coordinates, null when none given)",
"generated_at": "ISO 8601 timestamp at which the site generated the directory data",
"matched_count": "integer, number of rows returned after filters",
"network_total": "integer, the site's own count of live magazines in the whole network before filtering"
},
"sample": {
"data": {
"magazines": [
{
"city": null,
"name": "Manchester Magazine",
"slug": "manchester",
"type": "regional",
"domain": "manchestermagazine.co.uk",
"region": "Greater Manchester, North West England",
"latitude": 53.4808,
"longitude": -2.2426,
"distance_km": 0.19,
"website_url": "https://manchestermagazine.co.uk",
"country_code": "GB",
"directory_eligible": true
},
{
"city": "Oldham",
"name": "Oldham Magazine",
"slug": "oldham-magazine",
"type": "regional",
"domain": "oldhammagazine.com",
"region": "Oldham",
"latitude": 53.541,
"longitude": -2.118,
"distance_km": 10.54,
"website_url": "https://oldhammagazine.com",
"country_code": "GB",
"directory_eligible": true
}
],
"generated_at": "2026-09-10T18:58:08.816Z",
"matched_count": 11,
"network_total": 172
},
"status": "success"
}
}About the magazine API
What the API Returns
The search_magazines endpoint returns the complete magazine.ad network directory, one row per publication. Each magazine row includes a stable slug identifier, name, domain, website_url, city (may be null when the source records none), region, ISO 3166-1 alpha-2 country_code, latitude/longitude, type, and a flag indicating directory eligibility. The response also surfaces matched_count (rows returned after any active filters), network_total (the site's own count of live magazines before filtering), and a generated_at ISO 8601 timestamp.
Filtering and Geographic Search
Calling search_magazines with no parameters returns the entire directory. The query parameter performs a case-insensitive substring match against magazine name, city, and region simultaneously — useful for finding all publications tied to a specific town or area. The country_code parameter restricts results to one country using standard ISO codes (e.g. GB, PL, IE). Proximity filtering requires both latitude and longitude to be supplied together; once set, the optional radius_km parameter keeps only magazines within that great-circle distance, and each returned row includes a distance_km field.
Coverage and Freshness
Coverage is limited to the magazine.ad network, which currently indexes publications in the United Kingdom, Poland, and Ireland. The generated_at field in every response reflects when the directory data was produced, giving callers a clear signal of freshness. The network_total field lets you verify that a filtered query is working against the full live dataset.
The magazine API is a managed, monitored endpoint for magazine.ad — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when magazine.ad changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official magazine.ad API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a local media finder that surfaces nearby magazines given a user's GPS coordinates using
latitude,longitude, andradius_km. - Filter all Polish or Irish publications by passing
country_code=PLorcountry_code=IEtosearch_magazines. - Populate a media-outreach database with
name,website_url, andregionfields for regional UK titles. - Render a map of magazine coverage by plotting each publication's
latitudeandlongitudecoordinates. - Search for magazines covering a specific city or region using the
queryparameter to match against city and region fields. - Audit network growth over time by tracking changes in the
network_totalfield across repeated calls. - Build a hyperlocal advertising tool that suggests nearby magazines to businesses by querying with a postcode-derived coordinate.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does magazine.ad offer an official developer API?+
What does the `search_magazines` endpoint return when called without any parameters?+
generated_at, matched_count, and network_total fields.How does proximity filtering work, and what happens if only one coordinate is supplied?+
latitude and longitude must be supplied together; the API will not compute distances with only one. Once both are provided, adding radius_km trims results to magazines within that great-circle distance and adds a distance_km field to each row. Omitting radius_km while supplying coordinates still returns distances but does not trim the result set.