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.
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
Once a month, or weekly if you prefer, ClickRuntime goes through every post on your WordPress site.
It builds a spreadsheet file with each post's title, link, status, date and categories.
The file arrives in your inbox, with the number of posts in the subject.
Before it runs live
- Connect WordPress
What you get
Build your own
Need it to work differently?
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
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?
Does it include drafts and private posts?
Can I run it once instead of on a schedule?
What permissions does it need?
Does it need AI?
How many runs does it use?
Can I change how it works?
Related
You might also like
Unpublish posts past a certain age
Posts older than your cutoff are set back to draft each week, and you get the list of what changed.
See how it worksGet a daily list of new site sign-ups
Once a day you get the people who registered on your site since the last email.
See how it worksGet reminded about forgotten drafts
Every week you see the drafts nobody has touched in a month, so they get finished or deleted.
See how it worksKeep exploring
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.