Skip to content

On a schedule

Get a monthly CSV of all your posts

A spreadsheet file with every post's title, link, status, date and categories arrives in your inbox each month.

Runs
On a schedule
Apps
WordPress
AI
Not needed
Access
read (edit context for drafts)

Send this to your assistant

Create a ClickRuntime automation: on the 1st of each month, export all my WordPress posts with title, URL, status, publish date and categories, and email me the CSV.

Paste it into your assistant. It tells you what it will send or change before it runs live.

First time? Adding ClickRuntime to your assistant takes about two minutes.

Why use it

Why teams use this automation

Content audits start with a list. Before rewriting old articles, migrating hosts or handing a site to an agency, someone needs every post with its title, publish date, URL and status in one sheet. WordPress has no friendly export for that, so people copy rows from the Posts screen page by page, or install a plugin used for a single afternoon.

On the schedule you pick, the automation pages through every post on the site, builds a CSV with titles, dates, links and status, and emails the file to you. It reads through however many pages of results WordPress returns, so a site with 3,000 posts is covered just as a site with 30.

It works well monthly for SEO and content teams who keep an audit sheet up to date, or once for a migration.

What you get out of it

  • An audit starts with real data

    Instead of relying on a memory of what is on the site, you open a sheet that lists every post, so gaps, thin pages and old announcements are easy to sort and filter.

  • No plugin to install

    A one-off export plugin adds code to a production site and then has to be removed. Reading posts through the WordPress API leaves the site itself untouched. Fewer plugins also means fewer updates to track and fewer security holes to worry about.

  • A dated record of the site

    Receiving the CSV each month gives you snapshots to compare, so you can show how many posts were added, retired or moved between statuses over a quarter. Comparing two months of lists makes it easy to prove how much content you really published.

  • Handing over is simpler

    When an agency or new editor takes over, you can send the same file you receive, with titles and links, rather than giving them an admin login to explore. It also lets freelancers and consultants start a project with the facts, not a login.

  • Large sites are not a problem

    Because the export pages through all results, you do not hit the limit of a single screen of posts, and the file stays complete as the archive grows. Paging through everything means the thousandth post is exported as reliably as the first.

How it works

What happens, step by step

  1. Once a month, or weekly if you prefer, ClickRuntime goes through every post on your WordPress site.

  2. It builds a spreadsheet file with each post's title, link, status, date and categories.

  3. The file arrives in your inbox, with the number of posts in the subject.

Before it runs live

  • Connect WordPress

What you get

RunsOn a schedule
Get a monthly CSV of all your poststoday, 9:00Succeeded
Email · WordPress posts export (214 posts)title,url,status,date,categories How to price freelance work,https://blog.example.com/price-freelance-work/,publish,2026-09-02,Guides

Build your own

Need it to work differently?

This template is a starting point. Copy the prompt and change it, or describe a different automation from scratch, with your own conditions, more apps or an AI step. Your assistant writes it, tests it and runs it on ClickRuntime.
  • Your own rules

    Conditions, thresholds, filters and exceptions, written the way you'd explain them to a colleague.

  • Any number of apps

    One automation can read from one app and update several others. Over 248 apps are ready, and anything with an API works too.

  • AI where it helps

    Summaries, classification, extraction and drafts use ClickRuntime's built-in AI, with no extra key.

  • On a schedule or on each event

    Runs as often as every 5 minutes, or the moment an app sends an event, and keeps track of what it already handled.

Changes you can ask for

  • Run it at a different time, more or less often, or only on weekdays
  • Add an AI step, for example to summarize, sort or draft a reply
  • Add another app, for example also send it to Slack
  • Combine it with other WordPress steps into one automation

Under the hood

The code that runs this automation

This is the Python script that runs each time the automation starts. Your AI assistant writes it for you when you send the prompt, and you allow each step in your assistant. To change how the automation works, describe the change to your assistant and it updates the script for you. For every function it can use, see the script reference.
export_all_posts_to_a_spreadsheet_file.pyexample
import csv, io
from clickruntime import on_trigger, credentials, http, notify

SITE = "https://blog.example.com"

def wp(method, path, **kw):
    resp = http.request(method, f"{SITE}/wp-json/wp/v2/{path}", **kw,
                        auth=("admin", credentials.secret("WP_APP_PASSWORD")))
    resp.raise_for_status()
    return resp.json()

@on_trigger
def run(event):
    cats = {c["id"]: c["name"] for c in wp("GET", "categories", params={"per_page": 100})}
    out = io.StringIO()
    writer = csv.writer(out)
    writer.writerow(["title", "url", "status", "date", "categories"])
    page, total = 1, 0
    while True:
        resp = http.get(f"{SITE}/wp-json/wp/v2/posts", auth=("admin", credentials.secret("WP_APP_PASSWORD")),
                        params={"per_page": 100, "page": page, "status": "any", "context": "edit"})
        resp.raise_for_status()
        for p in resp.json():
            writer.writerow([p["title"]["raw"], p["link"], p["status"], p["date"][:10],
                             "; ".join(cats.get(c, "") for c in p["categories"])])
            total += 1
        if page >= int(resp.headers.get("X-WP-TotalPages", 1)):
            break
        page += 1
    notify.email_me(f"WordPress posts export ({total} posts)", out.getvalue())
    return {"posts": total}

FAQ

Common questions

Which columns end up in the CSV?
It includes title, publish date, link and status for every post. If you also need author, categories or word count, tell your AI assistant to add those fields and approve the change before the next run.
Does it include drafts and private posts?
It can, provided the WordPress user whose credentials are connected has permission to see them. For a full audit, use an account with editor or administrator rights so unpublished content appears alongside the live posts.
Can I run it once instead of on a schedule?
Yes. If you only need a single file, run it once from the ClickRuntime dashboard and then turn it off, or set it up with a long interval. Many people do this before a site migration.
What permissions does it need?
read (edit context for drafts). Nothing else in your accounts is used.
Does it need AI?
No. It runs without AI, so it doesn't use your plan's AI allowance.
How many runs does it use?
One run each time it runs (on a schedule). Checks that find nothing to do and stop right away aren't counted.
Can I change how it works?
Yes. Describe the change to your AI assistant, for example a different schedule, channel or filter. It updates the automation, tests it and tells you what changed.

Set up “Get a monthly CSV of all your posts” from your assistant

Copy the prompt above, or connect your assistant first. Free plan, no credit card.