# WordPress Posts and Pages Scraper: Export Public Content

> WordPress posts scraper for public sites: export posts and pages with HTML, plain text, dates, categories and tags via the REST API. JSON or CSV.

URL: https://cliqtomedia.com/actors/wordpress-posts-pages-scraper/

Category: AI-ready content & documents · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/wordpress-posts-pages-scraper?fpr=cliqto

Add a WordPress site URL and export its public posts and pages. You get HTML, plain text, dates, categories and tags. The site must allow its public REST API.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `https://wordpress.org/news` in WordPress site URLs. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Export public WordPress posts and pages with HTML, plain text, dates, categories and tags. Add one site URL for a small content sample. The site must allow its public WordPress REST API. Limits and source errors are shown in the run summary.





## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.0045 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Saved post or page | $0.0019 | One unique public published post or page saved to the Dataset. |

- One post or page: about $0.0064.
- 1,000 posts and pages: about $1.90.
- Every day 100 posts and pages, for 30 days: about $5.83 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/wordpress-posts-pages-scraper?fpr=cliqto

## Questions

### Can it get drafts or private posts?

No. It reads only published, public posts and pages.

### Why does a site not work?

Some sites turn off the public WordPress REST API. Then the tool cannot read them.

### Does it change anything on the site?

No. It only reads data. It never edits the site.

### Does it get comments or images?

No. Comments, media files and author profiles are not included.

### Do I need a WordPress login?

No. The source API must be public. The Actor does not accept passwords or cookies.

### Does it work on every WordPress site?

No. It needs a reachable core REST API on that site. Some hosted sites, plugins and firewalls change or block the API.

### Is an empty run free?

No. It has the start event and Apify platform usage, but no saved-record event.

### Can it collect all content without a limit?

No. Each run has explicit result, page, time, request and size limits. Check the summary before using an export.

### Are category and tag names always available?

No. IDs can be present while embedded names are missing. Those values stay null and extractionStatus is partial. Standard pages have empty taxonomy arrays.

## Data fields

- `sourceUrl` (string)
- `recordType` (string)
- `type` (string)
- `status` (string)
- `link` (string)
- `titleText` (string)
- `contentText` (string)
- `excerptText` (string)
- `extractionStatus` (string)
- `observedAt` (string)
- `slug` (string)
- `date` (string)
- `date_gmt` (string)
- `modified` (string)
- `modified_gmt` (string)
- `id` (integer)
- `title` (object)
- `content` (object)
- `excerpt` (object)
- `categories` (array)
- `tags` (array)
- `categoryDetails` (array)
- `tagDetails` (array)

## Input settings

- `siteUrls` (array, required): Add 1–5 public WordPress site roots or subdirectories. No login, URL query or private network addresses. Duplicates are removed.
- `contentTypes` (array): Choose posts, pages, or both. The chosen order uses the shared result limit.
- `maxResults` (integer): Global limit across all sites and content types. A limit stop is partial.
- `maxPagesPerType` (integer): Maximum API pages for each site and content type. Start with 1 for a small test.
- `perPage` (integer): WordPress page size. Start with 20; larger responses can hit the response size limit.
- `search` (string): Optional source-side search, applied to all selected content types. Empty means no search filter.
- `requestDelayMs` (integer): Delay before each API request. Keep 1000 or increase it for smaller sites.

## Step by step on Apify

1. Open Input.
2. Add `https://wordpress.org/news` to WordPress site URLs (`siteUrls`).
3. Choose `posts` and `pages`.
4. Set `maxResults` to 4, `perPage` to 2 and `maxPagesPerType` to 1.
5. Click Start. Open the Dataset and check `id`, `titleText` and `link`.
6. Open KVS `RUN_SUMMARY`. The sample is `partial` because more posts exist.

## Use cases

| Task | Input | Key fields | Next step |
|---|---|---|---|
| Content migration | Choose posts and pages | content.rendered, title.rendered, slug, link | Export JSON for your migration tool. |
| SEO content list | Add a site and small limit | id, titleText, link, date, categories | Export CSV for review. |
| Text collection | Choose posts and optional search | contentText, excerptText, sourceUrl | Read Dataset records in your text workflow. |

## Tips

- Start small: 4 results and 1 page per type. Check the output first.
- Read the run summary. An empty dataset alone does not tell you what happened.
- Use the search field to export only posts about one topic.

## Limits

The result cap is 1,000 saved records per run. A live WordPress News export returned 1,000 supported posts at 512 MB. This proves that sample, not every WordPress site. Sources can change, block cloud IPs, disable REST API routes or return large content.



## Sample result

```json
{
  "sourceUrl": "https://wordpress.org/news",
  "recordType": "POST",
  "id": 21731,
  "type": "post",
  "status": "publish",
  "link": "https://wordpress.org/news/2026/09/wordpress-7-1-2-release/",
  "date": "2026-09-22T14:01:20",
  "date_gmt": "2026-09-22T14:01:20",
  "title": {
    "rendered": "WordPress 7.1.2 Release"
  },
  "titleText": "WordPress 7.1.2 Release",
  "categories": [
    14,
    15
  ],
  "tags": [],
  "categoryDetails": [
    {
      "id": 14,
      "name": "Releases",
      "slug": "releases",
      "link": "https://wordpress.org/news/category/releases/"
    },
    {
      "id": 15,
      "name": "Security",
      "slug": "security",
      "link": "https://wordpress.org/news/category/security/"
    }
  ],
  "tagDetails": [],
  "extractionStatus": "complete",
  "content": {
    "rendered": "\n<p class=\"wp-block-paragraph\">This security release features a fix for a critical severity security vulnerability.</p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong",
    "protected": false
  },
  "contentText": "This security release features a fix for a critical severity security vulnerability.\n\nBecause this is a security release, it is recommended that you update your"
}
```

## Use it from code

Actor ID: `cliqtomedia/wordpress-posts-pages-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/wordpress-posts-pages-scraper").call(run_input={
    "siteUrls": [
        "https://wordpress.org/news"
    ],
    "contentTypes": [
        "posts",
        "pages"
    ]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~wordpress-posts-pages-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"siteUrls": ["https://wordpress.org/news"], "contentTypes": ["posts", "pages"]}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/wordpress-posts-pages-scraper")
result = tool.invoke({"run_input": {"siteUrls": ["https://wordpress.org/news"], "contentTypes": ["posts", "pages"]}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Similar tools

- [RSS & Atom Feed Reader / Monitor](https://cliqtomedia.com/actors/rss-atom-feed-reader-monitor/)
- [News Article Extractor: RSS, URLs & Clean Text](https://cliqtomedia.com/actors/news-article-extractor/)
- [PDF & Image to Text OCR for AI Agents - No Login](https://cliqtomedia.com/actors/pdf-text-ocr/)
- [RAG Web Search: Google Results as Clean Markdown](https://cliqtomedia.com/actors/rag-web-search/)
- [Website Screenshot & PDF Generator: Full Page & Mobile](https://cliqtomedia.com/actors/website-screenshot-pdf/)
- [Website to Markdown for RAG: Crawl & Changed Pages](https://cliqtomedia.com/actors/website-to-markdown/)
