Dezeen Articles Scraper
Pricing
from $1.40 / 1,000 results
Dezeen Articles Scraper
Searches Dezeen, the world's most-read architecture and design publication, and returns full article records — title, author, categories, tags, image, publish date — from its public WordPress API, with optional comment threads.
Pricing
from $1.40 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Searches Dezeen — the world's most-read architecture, interiors and design publication (62,000+ articles, 1,135 categories, 10,800+ tags, 535 authors) — and returns full article records: title, author, categories, tags, image and publish date, straight from its public WordPress API, with optional comment threads.
Public data only. No login, no cookies, no browser, no bot challenge on any profile this actor uses.
What you get
Four record types share one dataset, told apart by recordType.
POST — one row per article
Raw passthrough of Dezeen's own WordPress REST object (id, date,
slug, link, title, excerpt, content, author, categories,
tags, featured_media, jetpack_featured_media_url, …) plus flattened
article* convenience fields (plain-text title/excerpt, resolved category
and author names — not just numeric ids — publish/modified timestamps,
image URL).
SEARCH_SUMMARY — one row per query
Upstream's own X-WP-Total count for that exact filtered query, how many
rows this run pulled, how many pages it fetched, and every filter that was
actually applied (in both slug and resolved-id form) — so a row can be
audited without rerunning the query.
COMMENT — one row per comment (opt-in)
Only emitted when Include comments is on: comment author, text, date and the parent comment id for threading, batched across articles rather than one request per article. Dezeen carries a real comment corpus (191,836 sitewide) — this is not a symbolic feature.
ERROR — one row per input that failed
So every query/URL maps to at least one row, even when it fails.
Input
| Field | What it does |
|---|---|
| Search queries | one full-text search per entry — e.g. sustainable architecture, 3D printing |
| Direct article URLs | fetch specific articles by exact URL instead of searching |
| Filter by category / tag / author (slugs) | narrow every query — the slug from the term's own URL on dezeen.com, not the display name |
| Published after / before | date window, YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS (UTC) |
| Max articles per query | 0 = unlimited, up to maxPagesPerQuery |
| Max pages per query | caps how deep an unlimited crawl goes |
| Include full article HTML | adds the full rendered article body; on by default |
| Include comments | adds COMMENT rows, batched; off by default |
Leave every query field empty to fetch the latest articles instead — a first-class mode, not an edge case, optionally still narrowed by the category/tag/author/date filters.
Dezeen categorises far more granularly than most sites in this family:
alongside editorial sections (architecture, interiors, design,
technology) it has 1,135 categories total, including individual
product/material/studio names.
Example
{"searchQueries": ["sustainable architecture"],"categorySlugs": ["architecture"],"maxItemsPerQuery": 30,"includeComments": true,"maxCommentsPerArticle": 20}
Filters are verified, not guessed — and refuse rather than lie
Every filter this actor exposes was checked against Dezeen's live API before being offered, per this portfolio's trap checklist:
- Category/tag/author slugs must resolve to a real term.
?slug=on Dezeen's taxonomy routes answers HTTP 200 with an empty list for a bogus slug — not an error. Silently dropping an unresolvable slug would serve the whole unfiltered 62,000-article archive under a filtered label, so this actor raises instead and the run ends with a namedERRORrow (unresolved_term) telling you exactly which slug failed. - A combined category + tag filter narrows honestly. Verified with a
real intersection (
architecture+sustainable-architecture→ exactly 299 results, not the unfiltered count of either alone). sortByis a verified 5-value enum.relevanceis deliberately not offered as a free-standing choice — upstream only allows it alongside a search query (HTTP 400 otherwise) — so it is applied automatically wheneversearchQueriesis set.- Pagination ends honestly. Asking past the last page answers a plain
HTTP 400
rest_post_invalid_page_number, never a silent re-serve of page 1.
Notes on reliability
- No WAF on the profiles this actor uses.
chrome124,firefox133andsafari17_0all return identical 200s, cold, on every JSON endpoint used. A mobile profile (chrome99_android) does get a reproducible HTTP 403 — it is deliberately excluded from this actor's rotation pool. robots.txtdisallows only/wp-admin/(withadmin-ajax.phpexplicitly allowed back) — no ClaudeBot/anthropic-ai/CCBot/GPTBot group of any kind, noCrawl-delay, and/wp-json/is untouched. Policy-open.- Requests go to
www.dezeen.comdirectly — the bare domain 302s towww, so using it would add a redirect hop to every request. - Comment fetches are batched, not one request per article.
- Residential proxy, no country pin is the cloud default — no geo-gate observed in recon.
Known limits
- Full-text search is relevance-based, not exact-phrase.
resultsPerRequestis hard-capped at 100 by WordPress core.