WordPress - Sheet Automation
Sheet Automation turns a Google Sheet into a publishing queue. Each row becomes a WordPress post — you define the title, content, categories, and any other metadata right inside the spreadsheet, and Tenwrite handles the rest.
Because each row can target a different WordPress site using the SITE column, a single sheet can manage content across all your sites at once. This makes it particularly useful for bulk publishing and programmatic SEO.
How It Works
Section titled “How It Works”Tenwrite checks your sheet once every hour. New rows create new posts. Rows that have changed update the existing post. Rows that are unchanged are skipped. Rows missing required fields are skipped without error.
The maximum is 200 rows per sheet on Pro and 500 rows per sheet on Agency.
Set Up Your Google Sheet
Section titled “Set Up Your Google Sheet”Required Columns
Section titled “Required Columns”Your sheet must include these exact column names:
| Column | Required | Description |
|---|---|---|
| SITE | Yes | WordPress site URL (e.g., example.com) |
| TITLE | Yes | Post or page title |
| CONTENT | Yes* | Post content — Markdown is supported |
| GOOGLE DOC | Yes* | Link to a Google Doc to use as content |
Optional Columns
Section titled “Optional Columns”| Column | Options | Example |
|---|---|---|
| EXCERPT | Any text | Brief post summary |
| OBJECT TYPE | post or page | post |
| STATUS | draft, publish, future, private, pending | draft |
| SLUG | URL-safe text | my-awesome-post |
| CATEGORIES | Comma-separated | tech, tutorial, google |
| TAGS | Comma-separated | wordpress, automation |
| COMMENT STATUS | open or closed | open |
| PING STATUS | open or closed | open |
| PUBLISH DATE | YYYY-MM-DD HH:MM | 2025-12-31 23:59 |
| OUTPUT FORMAT | wp_blocks or classic_html | wp_blocks |
| PRESET | balanced or preset name | balanced |
| FORMATTING | balanced or full | balanced |
| AUTHOR | Display name or email of the author | Bob Kane/bob.kane@email.com |
| PARENT | Numeric ID of the page to mark as parent; ignored when OBJECT TYPE is post | 41 |
| SEO TITLE | Any text | What is automation |
| SEO DESCRIPTION | Any text | Describes automation and its forms. |
| FOCUS KEYPHRASE | Any text | automation |
Sharing a Google Doc with Tenwrite
Section titled “Sharing a Google Doc with Tenwrite”If you’re using the GOOGLE DOC column, the referenced document needs to be readable by Tenwrite. There are two ways to do this:
Option A — Share with the service account:
Open the Google Doc, click Share, and add automation@tenwrite-gcp.iam.gserviceaccount.com as a Viewer. Click Share anyway if prompted.



Option B — Make the doc public:
In the Share dialog, change General access to Anyone with the link (Viewer) and click Done.


Create the Automation
Section titled “Create the Automation”Open the Tenwrite add-on or Web Dashboard, go to WordPress > Automations, and switch to the Sheets tab.
Click New Automation (or Create Sheet Automation if none exist). The create form opens.



Click Select Google Sheet, choose your spreadsheet from the picker, and select the tab that contains your data.

Check Enable Automation Immediately if you want it to start on the next hourly run, then click Create Automation.

Tracking every Automation Run
Section titled “Tracking every Automation Run”When the automation processes your sheet, Tenwrite adds and manages two result columns on the selected tab:
- TENWRITE STATUS shows the latest WordPress state that Tenwrite confirmed for the post or page.
- TENWRITE LOGS records what Tenwrite did, when it happened, and whether the row needs attention.
These are output columns. You keep working in columns such as TITLE, CONTENT, GOOGLE DOC, and STATUS; Tenwrite writes the result columns for you.
STATUS and TENWRITE STATUS serve different purposes.
- STATUS tells Tenwrite what you want when it creates or updates the row, such as
draft,publish, orfuture. - TENWRITE STATUS tells you what Tenwrite most recently confirmed in WordPress.
For example, a row can keep future in STATUS while TENWRITE STATUS changes from SCHEDULED to PUBLISHED after the scheduled time. Do not type into, rename, or delete the Tenwrite-managed columns.
What TENWRITE STATUS Means
Section titled “What TENWRITE STATUS Means”| Status | Meaning |
|---|---|
| DRAFT | The post or page is saved in WordPress but is not live. |
| SCHEDULED | WordPress is set to publish it at a future date and time. |
| PUBLISHED | The post or page is live. |
| PENDING REVIEW | The item is waiting for an editor or administrator to review it. |
| PRIVATE | The item is published privately and is only visible to people with the right access. |
| TRASHED | The item is in the WordPress trash and may still be restored. |
| MISSING | Tenwrite can no longer find the linked item in WordPress. It may have been deleted. |
| NOT EXPORTED | The row is not linked to a WordPress post or page because one has not been created yet. |
The cells are color-coded to make large sheets easier to scan: published items are green, scheduled items are blue, review items are amber, private items are purple, and trashed or missing items are red. The written label is always the final meaning, so you do not need to rely on color alone.
Read TENWRITE LOGS
Section titled “Read TENWRITE LOGS”Each log line includes a date and time, an action, and a simple explanation. Timestamps use your account or spreadsheet time zone when available, with UTC as the fallback. The newest entry appears at the bottom.
| Log action | What happened |
|---|---|
| EXPORTED | Tenwrite created the WordPress post or page for the first time. |
| SYNCED | Tenwrite updated the WordPress item already linked to the row. |
| SKIPPED | Tenwrite intentionally did not create or update the row. Read the message for why. |
| EXPORT FAILED | Tenwrite could not create the item. The message explains what you should check. |
| SYNC FAILED | Tenwrite could not update the existing item. The message explains what went wrong. |
| STATUS INITIALIZED | Tenwrite checked WordPress and filled in the row’s current status for the first time. |
| STATUS CHANGED | WordPress now reports a different state from the last one Tenwrite confirmed. |
The cell keeps the latest 10 Tenwrite entries so a busy sheet stays readable. If older entries have been removed, the first line says so. Open Automations > View Last Run for fuller run details and errors.
When the Status Is Refreshed
Section titled “When the Status Is Refreshed”- A new, updated, or newly tracked row receives its confirmed status during an automation run.
- A
SCHEDULEDrow is checked on later hourly runs so it can change toPUBLISHEDafter WordPress publishes it. - A
TRASHEDorMISSINGrow is checked on the next few eligible runs, then no more than once a day. If you restore the item, Tenwrite can detect that and update the row. - Other rows show the latest state Tenwrite confirmed while processing them. A change made directly in WordPress may not appear until Tenwrite processes that row again.
- A temporary WordPress or connection problem does not automatically change a row to
MISSING; Tenwrite keeps the last confirmed state instead.
You can sort or move existing rows without losing their Tenwrite tracking. If you clear every editable input cell from a row, Tenwrite clears its managed status and logs after confirming that the row is still empty. To create a separate item, add a fresh row rather than copying a fully processed row.
Managing Automations
Section titled “Managing Automations”The Sheets tab lists all your automations with run stats — total runs, posts created, rows processed, failures — and when each last ran. Use the action button in each row to pause or resume.

Example
Section titled “Example”| SITE | TITLE | CONTENT | OBJECT TYPE | CATEGORIES | TAGS |
|---|---|---|---|---|---|
| shop.com | Red T-Shirt | Comfortable cotton… | post | Products, Clothing | product, t-shirt |
| events.com | Concert Info | Check out this event… | post | Events, Music | events, music |
| company.com | About Us | Learn about our company… | page | company, about |
Troubleshooting
Section titled “Troubleshooting”Automation doesn’t seem to be running
Section titled “Automation doesn’t seem to be running”- Check that SITE, TITLE, and either CONTENT or GOOGLE DOC are present in every row.
- Verify the exact column names match (they’re case-sensitive).
- Make sure the automation is enabled.
- Confirm your WordPress sites are connected.
Posts aren’t being created
Section titled “Posts aren’t being created”- Confirm each row has SITE, TITLE, and content.
- Check that STATUS uses exact values:
draft,publish,future,private, orpending. - If using Google Doc links, make sure the doc is shared with the service account or set to public.
Scheduled posts aren’t publishing at the right time
Section titled “Scheduled posts aren’t publishing at the right time”- Use
YYYY-MM-DD HH:MMformat for PUBLISH DATE. - STATUS must be exactly
futurefor scheduled posts. - Posts are scheduled during the next automation run after the form is submitted.
The sheet values are not showing in Blogger
Section titled “The sheet values are not showing in Blogger”- If a doc has a Frontmatter table, it overrides the corresponding sheet columns. This is intentional — the doc’s own metadata takes priority.
Related Guides
Section titled “Related Guides”Need help? Contact support@tenwrite.com with your sheet link and a description of the issue.
Tenwrite is an independent product not affiliated with or endorsed by Google LLC, Blogger, or WordPress Foundation. Google Docs, Gmail, Google Workspace are trademarks of Google LLC. WordPress is a trademark of the WordPress Foundation.