Blogger - Sheet Automation
Sheet Automation turns a Google Sheet into a publishing queue. Each row becomes a Blogger post — you define the title, content, labels, status, and destination blog right in the spreadsheet, and Tenwrite handles the rest.
Because each row can target a different blog, a single sheet can manage content across all your Blogger blogs 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 on an hourly schedule. You can also use Run Now for one run without waiting. New rows create posts, changed rows update their linked posts, and unchanged rows are skipped. Rows with missing or invalid inputs are reported with messages so you can correct them.
The per-run allowance is 200 rows on Pro and 500 rows on Agency. Check the row count shown beside your spreadsheet in the automation list; do not assume a larger tab will be fully processed in one run.
Set Up Your Sheet
Section titled “Set Up Your Sheet”Columns
Section titled “Columns”| Column | Required | Description |
|---|---|---|
| SITE | Yes | Blogger blog URL, e.g. example.blogspot.com |
| TITLE | Yes | Post title |
| CONTENT | One of these two | Post body — Markdown is supported |
| GOOGLE DOC | One of these two | URL of a Google Doc to use as the post body |
| LABELS | No | Comma-separated labels: tech, tutorial |
| STATUS | No | LIVE, DRAFT, or SCHEDULED |
| PUBLISH DATE | No | YYYY-MM-DD HH:MM — required if STATUS is SCHEDULED |
| READER COMMENTS | No | ALLOW, DONT_ALLOW_SHOW_EXISTING, or DONT_ALLOW_HIDE_EXISTING |
| FORMATTING | No | balanced or full |
| PRESET | No | balanced or a saved preset name |
Every row needs SITE, TITLE, and at least one of CONTENT or GOOGLE DOC. Use CONTENT for short posts written directly in the sheet. Use GOOGLE DOC for long-form content that lives in Google Docs.
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 Blogger > 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, allow Google files access if asked, choose your spreadsheet, and select the tab that contains your data. Use the Google account matching your Tenwrite email address, with edit access to the spreadsheet. Tenwrite needs to write row results back to the sheet; sharing linked Docs alone does not give it spreadsheet access. See Google connections.

Enable automation immediately is selected by default. For a first test, clear it before clicking Create Automation. You can run the automation once while its regular schedule stays Disabled, then enable the schedule when you are ready.

Run a first test
Section titled “Run a first test”- Prepare one new test row. Use the connected blog in SITE, a title in TITLE, and either CONTENT or GOOGLE DOC as the body.
- Set STATUS to
DRAFT. If a linked Google Doc controls publication through frontmatter, choose Keep as draft there too. Check the publication outcome rules before running. - Save the automation with its regular schedule Disabled. Use View Sheet to check the spreadsheet and selected tab.
- Click Run Now. This performs a real export using the saved rows and settings; it is not a preview. It does not enable or move the regular schedule.
- After Automation queued., wait while the row shows Queued or Running. Do not start another run while this one is pending or in progress.
- Check the updated last-run time and click View Last Run. Read the counts and any row messages.
- Open Blogger > Posts and inspect the resulting draft in Blogger. Check the title, body, images, and links. Also check TENWRITE STATUS and TENWRITE LOGS in the sheet.
- Leave the schedule disabled while testing. When you want repeated runs, click Enable and check Next run at.
A successful run can create a draft, update a post, or skip unchanged rows. It does not always create a new public post.
Run Now and Next run at
Section titled “Run Now and Next run at”Run Now works while the regular schedule is Disabled, provided your plan and access allow it. It runs the saved automation once without changing that setting. It is unavailable while a run is queued or running, or while your plan blocks the automation.
Next run at describes the regular schedule, not when a manual run will finish. Its date and time use your browser’s local time. A post’s publication date uses your Tenwrite account timezone.
- Schedule disabled: automatic runs are paused; Run Now can still be available.
- Scheduled attempts are blocked: the schedule remains enabled, but a plan restriction prevents it from running. Open Review your plan. Disable the schedule first if you want it to stay paused after resolving the restriction.
- Unavailable: refresh the list and check its status. This message alone does not mean a row failed.
Destinations come from SITE in each row. An inaccessible or inactive blog can appear as a row issue even when the automation is enabled. Check it in Blogger > My Sites. See shared run controls.
Read the last-run results
Section titled “Read the last-run results”Click View Last Run on the automation’s row to open Last Run Details. Check the time to identify the run. These details describe the latest run, not its full history.
Summary
Section titled “Summary”The Summary tab shows the result and counts:
| Count | Meaning |
|---|---|
| Processed | Rows processed by this run; not a count of public posts. |
| Created / Updated | New posts created, or existing linked posts updated. |
| Failed | Rows that could not complete. Read Failed rows below the counts. |
| Skipped / Unchanged | Rows not exported, including unchanged rows. Read the message for other skips. |
| Warnings | Rows needing attention, including skipped rows and exports completed with a warning. |
The counts overlap: Unchanged is included in Skipped. Do not add every card together to get a total. The list’s cumulative Runs and Posts figures are separate from this latest-run summary.
Under Failed rows or Warning and skipped rows, read the row number, title when shown, and message. Run-level issue concerns the run as a whole. A completed export can have a warning, so check the destination before assuming nothing was saved.
Raw Timeline
Section titled “Raw Timeline”Open Raw Timeline for the recorded sequence of events and errors. Older runs may have only timeline data. If no details are available yet, wait for the current run to finish and reopen the dialog. A problem loading the dialog does not itself mean the export failed.
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 Blogger state that Tenwrite confirmed for the post.
- 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
LIVE,DRAFT, orSCHEDULED. - TENWRITE STATUS tells you what Tenwrite most recently confirmed in Blogger.
For example, a row can keep SCHEDULED 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 is saved in Blogger but is not live. |
| SCHEDULED | Blogger is set to publish it at a future date and time. |
| PUBLISHED | The post is live. |
| TRASHED | The post has been moved to Blogger’s trash and may still be recoverable. |
| MISSING | Tenwrite can no longer find the linked post in Blogger. It may have been deleted. |
| NOT EXPORTED | The row is not linked to a Blogger post because one has not been created yet. |
The cells are color-coded to make large sheets easier to scan: published posts are green, scheduled posts are blue, and trashed or missing posts 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. Times 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 Blogger post for the first time. |
| SYNCED | Tenwrite updated the Blogger post 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 post. The message explains what you should check. |
| SYNC FAILED | Tenwrite could not update the existing post. The message explains what went wrong. |
| STATUS INITIALIZED | Tenwrite checked Blogger and filled in the row’s current status for the first time. |
| STATUS CHANGED | Blogger 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 Blogger publishes it. - A
TRASHEDorMISSINGrow is checked on the next few eligible runs, then no more than once a day. If you restore the post, Tenwrite can detect that and update the row. - Other rows show the latest state Tenwrite confirmed while processing them. A change made directly in Blogger may not appear until Tenwrite processes that row again.
- A temporary Blogger 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 post, add a fresh row rather than copying a fully processed row.
Managing Automations
Section titled “Managing Automations”Use Enable or Disable for the regular schedule, Run Now for one run, and View Last Run for its result. The list shows the spreadsheet, selected tab, row allowance, next scheduled time, latest result, and cumulative statistics.

WordPress example. Blogger Sheets automations use the same run controls.
Example
Section titled “Example”| SITE | TITLE | CONTENT | LABELS |
|---|---|---|---|
| shop.blogspot.com | Red T-Shirt | Comfortable 100% cotton tee… | products, clothing |
| events.blogspot.com | Concert Friday | Doors open at 8pm… | events, music |
| tech.blogspot.com | App Review: Notion | We’ve been using Notion for… | tech, reviews |
Each row targets a different blog. Tenwrite processes all three in the same hourly run.
Troubleshooting
Section titled “Troubleshooting”Run Now will not start
Section titled “Run Now will not start”If the automation is Queued or Running, wait for that run to finish. For a plan block, open Review your plan and check automation access and limits. If Tenwrite says the Sheet automation is not ready to run, contact support with its ID. Do not delete and recreate it or change its tracking to bypass that message.
Find and fix a row error
Section titled “Find and fix a row error”- Wait for the run to finish, then open View Last Run > Summary.
- Find the row under Failed rows or Warning and skipped rows. Match the row number and title to the selected sheet tab. If you sorted the sheet after the run, also use the title to identify it.
- Open View Sheet and read TENWRITE LOGS for that row when available. Correct the input named in the message, or fix the relevant connection or permission.
- Keep the existing row and its tracking. Do not clear Tenwrite-managed result columns or copy the processed row to force a retry.
- Use Run Now on the same automation. Review the new result and destination content. Other changed rows may also run; this does not retry only the selected error.
Missing or invalid row inputs
Section titled “Missing or invalid row inputs”Use the template headers, including SITE, TITLE, and either CONTENT or GOOGLE DOC. Column capitalization does not matter, but keep the template’s names and spelling. Missing or misspelled headers can prevent Tenwrite from reading the inputs. Check the selected tab as well as the row.
Use a valid connected blog address in SITE. Use LIVE, DRAFT, or SCHEDULED for STATUS. For scheduling, choose SCHEDULED and a future PUBLISH DATE in YYYY-MM-DD HH:MM format. Dates use your Tenwrite account timezone. If frontmatter supplies the matching field, correct or clear it there instead.
Spreadsheet or Google Doc access fails
Section titled “Spreadsheet or Google Doc access fails”The Google account connected to Tenwrite needs edit access to the spreadsheet. In the web app, use Reconnect Google files when asked, or Retry Google access check if that check failed. See Google connections. In the installed add-on, close and reopen it to renew its Google connection.
A linked Google Doc has separate sharing requirements. Use the sharing steps above for the automation account. Selecting the spreadsheet does not give access to every Doc linked from it.
The destination is unavailable
Section titled “The destination is unavailable”Check SITE and whether that blog is connected, accessible, and active within your connected-site allowance. For Blogger access errors, use Reconnect Blogger in the web app. The connected Google account must match your Tenwrite account and have access to the blog. See Google connections.
A destination problem can affect some rows while other destinations still work. Use the row messages to identify which SITE needs attention.
Success but no new posts, or old sheet results
Section titled “Success but no new posts, or old sheet results”- Unchanged rows: no new post is needed. Open the existing item to check it.
- Draft or scheduled content: check its actual status in Blogger; success does not always mean public content.
- Row allowance: compare the selected tab’s row count with the per-run allowance. Split a larger workload into tabs or sheets within your plan’s limits.
- Sheet results not updated: status and logs can update separately from the export. Check View Last Run and the destination before repeating it. Check spreadsheet edit access if Tenwrite reports that it could not write the results.
Duplicate or missing row identity
Section titled “Duplicate or missing row identity”Tenwrite could not safely match the row to its tracking. Do not edit internal tracking or copy a fully processed row to create another post. Keep the sheet as it is and contact support@tenwrite.com with the automation ID, sheet/tab, and last-run message.
The sheet values are not showing in Blogger
Section titled “The sheet values are not showing in Blogger”Filled Google Doc frontmatter overrides matching sheet columns. Edit that value, or clear it to use the sheet value. Leave unrelated frontmatter fields in place.
Related Guides
Section titled “Related Guides”Need help? Contact support@tenwrite.com.
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.