WordPress to Google Sheets, audit-ready content lists
Content audits fall apart in the same place every time: the list. Someone pulls URLs, someone else copies titles, categories are half-missing, tags are still numeric IDs, and by the time you’re “ready,” you’ve already burned an afternoon.
Content managers feel this when planning updates, and SEO specialists feel it when they need fast filters for taxonomy cleanup. Even a busy site owner ends up stuck in spreadsheets. This WP Sheets export automation gives you a clean, shareable table of posts plus real category and tag names.
You’ll see what the workflow does, what you need to run it, and how to tweak it so your audits stay simple (and actually finish on time).
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: WordPress to Google Sheets, audit-ready content lists
flowchart LR
subgraph sg0["On form submission Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/form.svg' width='40' height='40' /></div><br/>On form submission"]
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Posts"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Categories"]
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Tags"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/merge.svg' width='40' height='40' /></div><br/>Merge"]
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/form.svg' width='40' height='40' /></div><br/>WP API Error"]
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Assign tags and categories n.."]
n7@{ icon: "mdi:database", form: "rounded", label: "Add posts, with tags, catego..", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/form.svg' width='40' height='40' /></div><br/>Form"]
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Config", pos: "b", h: 48 }
n4 --> n6
n9 --> n3
n9 --> n2
n3 --> n4
n3 --> n5
n1 --> n4
n1 --> n5
n2 --> n4
n2 --> n5
n0 --> n1
n0 --> n9
n6 --> n7
n7 --> n8
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n7 database
class n1,n2,n3 api
class n6 code
classDef customIcon fill:none,stroke:none
class n0,n1,n2,n3,n4,n5,n6,n8 customIcon
Why This Matters: Content audits need a reliable master list
If you’ve ever tried to audit a WordPress site with more than a few dozen posts, you know the drill. You start with good intentions, then you bounce between WordPress screens, export tools, and a spreadsheet that slowly becomes “almost right.” Categories show up as IDs, tags don’t match what’s on the site today, and someone inevitably pastes the wrong URL. The real cost isn’t just time. It’s that you stop trusting the data, so you second-guess decisions and the audit stalls.
It adds up fast. Here’s where the friction usually comes from.
- Pulling posts, categories, and tags separately means you’re constantly reconciling mismatched lists.
- WordPress exports rarely map taxonomy names onto each post cleanly, so you spend extra time translating IDs or guessing.
- Manual copy-paste into Sheets invites small errors that turn into big arguments later in the process.
- Sharing progress is awkward when everyone has their “own version” of the audit file.
What You’ll Build: A WordPress-to-Sheets content + taxonomy exporter
This workflow starts with a simple form submission where you provide your WordPress site URL and how many posts you want to analyze. From there, n8n calls the WordPress REST API three times: once for posts, once for categories, and once for tags. The results are merged into a single stream, then a transformation step replaces category and tag IDs with their real names, so the output is human-readable. Finally, the workflow appends clean rows into Google Sheets with the columns you actually need for an audit: URL, Title, Categories, and Tags. When it finishes, you get a confirmation and a link to the sheet, ready to filter and share.
The workflow begins at a form trigger and immediately sets a pagination limit for the WordPress requests. It pulls posts, categories, and tags in parallel, merges them, then maps taxonomy names onto each post. Google Sheets becomes the “single list” you can trust.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you’re auditing 200 posts. Manually, a basic list often means opening each post (maybe 1 minute each) and copying URL, title, categories, and tags, which is about 3 hours before you even start analysis. With this workflow, you submit the form in about 2 minutes, wait for the API pulls and mapping (often around 5–10 minutes depending on the site), and the sheet is ready. That’s most of an afternoon back, and you can spend it fixing content instead of collecting it.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- WordPress site with REST API enabled (/wp-json/wp/v2/).
- Google Sheets to store the audit table output.
- Google OAuth connection (create in n8n credentials for Google Sheets).
Skill level: Beginner. You’ll connect accounts, paste a site URL, and confirm the Sheet columns match.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
A form submission kicks things off. You enter your WordPress site URL and choose how many posts you want pulled into the audit. This makes it easy to start small, then scale up once you’re happy with the output.
The workflow fetches WordPress data in parallel. n8n sends HTTP requests to the WordPress REST API for posts, categories, and tags. There’s also an error handler path, so if the API is blocked or unavailable, you get a clear message instead of a silent failure.
Taxonomy IDs get translated into names. After merging the datasets, a code transformation step maps category and tag IDs onto each post, replacing them with readable category and tag names. This is the part that makes the sheet instantly useful for humans.
Google Sheets becomes your audit hub. The workflow appends one row per post into a sheet with columns for URL, Title, Categories, and Tags, then returns a completion response with confirmation and a link to the file.
You can easily modify the post limit or add extra WordPress fields (like author or featured image) based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Form Trigger
Set up the form that initiates the workflow and provides the WordPress URL and post limit.
- Add the Form Submit Trigger node and keep Form Title set to
WP SEO Audit. - In Form Fields, confirm a required text field labeled URL with placeholder
http://yourdomain.com. - Add a number field labeled Post limit with placeholder
Default =10to control how many posts are fetched.
Tip: Keep the URL field required so the downstream API calls don’t receive empty endpoints.
Step 2: Connect WordPress API Requests
Configure the parallel API requests that gather posts, tags, and categories from WordPress.
- Set up Fetch WP Posts with URL set to
={{ $json.URL }}/wp-json/wp/v2/posts?per_page={{ $json['Post limit'] }}. - Configure Set Pagination Limit to assign per_page as a number with value
100. - Set Retrieve WP Categories with URL
={{ $('Form Submit Trigger').item.json.URL }}/wp-json/wp/v2/categories?per_page={{ $json.per_page }}and enable Send Body. - Set Retrieve WP Tags with URL
={{ $('Form Submit Trigger').item.json.URL }}/wp-json/wp/v2/tags?per_page={{ $json.per_page }}. - Confirm execution order: Form Submit Trigger outputs to both Fetch WP Posts and Set Pagination Limit in parallel.
- Confirm that Set Pagination Limit outputs to both Retrieve WP Tags and Retrieve WP Categories in parallel.
⚠️ Common Pitfall: If the WordPress REST API is disabled, these requests will fail—ensure it’s enabled on the target site.
Step 3: Set Up Data Merging and Taxonomy Mapping
Combine the three API streams and convert taxonomy IDs into readable names.
- Configure Combine Results with Number of Inputs set to
3to accept posts, categories, and tags. - Verify that Fetch WP Posts, Retrieve WP Categories, and Retrieve WP Tags each connect into Combine Results.
- In Map Taxonomy Names, keep the provided JavaScript that maps tag and category IDs to names and enriches each post.
Step 4: Configure Output to Google Sheets
Append the enriched post data into a Google Sheet and send a completion response.
- Add Append Rows to Sheets and set Operation to
append. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials. - Select the target spreadsheet by setting Document ID to
[YOUR_ID]and Sheet Name togid=[YOUR_ID]. - Map columns using expressions: URL to
={{ $json.link }}, Title to={{ $json.title.rendered }}, Categories to={{ $json.categoryNames }}, and Tags to={{ $json.tagNames }}. - Set Completion Response with Completion Title
List createdand Completion MessagePlease check linked document to see details.
Tip: Ensure the target sheet has matching column headers so the mapping lands in the correct fields.
Step 5: Add Error Handling
Route failed API responses to a user-friendly error form.
- Configure WP API Error Handler with Operation set to
completion. - Set Completion Title to
WordPress API Errorand Completion Message toPlease check if your WP-Api is enabled. - Ensure error outputs from Fetch WP Posts, Retrieve WP Categories, and Retrieve WP Tags connect to WP API Error Handler.
Step 6: Test and Activate Your Workflow
Validate the end-to-end flow before turning it on in production.
- Use the Form Submit Trigger test form to submit a valid WordPress URL and a post limit.
- Confirm Append Rows to Sheets writes rows with URL, title, categories, and tags into the target sheet.
- If the API fails, verify the WP API Error Handler responds with the configured error message.
- When satisfied, toggle the workflow Active to enable live usage.
Troubleshooting Tips
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Credentials screen and re-authenticate the Google account first.
- If your WordPress REST API isn’t public, the HTTP Request nodes will fail. Test the endpoint in a browser (yourdomain.com/wp-json/wp/v2/posts) and fix security plugins, WAF rules, or basic auth requirements.
- Default mapping logic is only as good as your sheet structure. If your Google Sheet headers don’t match (URL, Title, Categories, Tags), the append step can misplace values or fail outright.
Quick Answers
About 20 minutes if your Sheet and credentials are ready.
No. You’ll import the workflow, connect Google Sheets, and paste your WordPress URL.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Google Sheets usage limits (usually fine for normal audits).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s mostly swapping or duplicating the HTTP Request nodes. Common tweaks include adding endpoints for authors or comments, expanding the code mapping to include featured image URLs, or replacing the “Append Rows to Sheets” step with Microsoft Excel 365 if that’s where your team lives.
Usually the REST API is blocked. Check that /wp-json/wp/v2/ is reachable publicly, then review security plugins, WAF settings, and any basic auth. Also confirm the site URL you submit includes the correct domain and protocol (http vs https). If it works in your browser but not in n8n, it can be rate limiting or an IP block on your hosting.
For most sites, pulling a few hundred posts per run is fine, and you can repeat it for larger audits.
Often, yes, because this is not just a single “WordPress to Sheets” action. You’re pulling three datasets, merging them, and doing a taxonomy mapping step that’s awkward (or expensive) in simpler tools. n8n also lets you self-host for unlimited executions, which matters if you run audits frequently or across multiple client sites. Zapier and Make can still work if you only need a basic export and you don’t care about category/tag name mapping. If you’re unsure, Talk to an automation expert and we’ll point you to the cleanest option.
Once you have a trustworthy content list, the rest of the audit gets weirdly easy. Let the workflow handle the export, then use your time for decisions that actually move rankings and revenue.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.