Dezeen Articles Scraper avatar

Dezeen Articles Scraper

Pricing

from $1.40 / 1,000 results

Go to Apify Store
Dezeen Articles Scraper

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

Ibnu Adzim

Maintained by Community

Actor 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

FieldWhat it does
Search queriesone full-text search per entry — e.g. sustainable architecture, 3D printing
Direct article URLsfetch 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 / beforedate window, YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS (UTC)
Max articles per query0 = unlimited, up to maxPagesPerQuery
Max pages per querycaps how deep an unlimited crawl goes
Include full article HTMLadds the full rendered article body; on by default
Include commentsadds 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 named ERROR row (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).
  • sortBy is a verified 5-value enum. relevance is deliberately not offered as a free-standing choice — upstream only allows it alongside a search query (HTTP 400 otherwise) — so it is applied automatically whenever searchQueries is 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, firefox133 and safari17_0 all 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.txt disallows only /wp-admin/ (with admin-ajax.php explicitly allowed back) — no ClaudeBot/anthropic-ai/CCBot/GPTBot group of any kind, no Crawl-delay, and /wp-json/ is untouched. Policy-open.
  • Requests go to www.dezeen.com directly — the bare domain 302s to www, 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.
  • resultsPerRequest is hard-capped at 100 by WordPress core.