# Daily blog draft from your content calendar to Contentful

> Every weekday at 8am, take the next topic from your Google Sheets content calendar, draft a full first-pass article, and save it as a Contentful draft for review.

- Workflow type: agent
- Services: Contentful, Google Sheets
- Categories: Marketing
- Published: 2026-07-17

## What it does

- Every weekday morning, grabs the next unclaimed row from your Google Sheets content calendar (topic, target keyword, angle, notes, status).
- Drafts a full first-pass blog article with a headline, intro, three to five sections, and a meta description tuned to your target keyword.
- Saves the draft to your Contentful blogPost content type as a draft, so nothing is published without your team's sign-off.
- Writes the new Contentful entry link and a Draft ready status back to the calendar row so marketing knows exactly what to review.

## What you'll need

- A Google Sheet with your content calendar — one row per topic, with columns for topic, target keyword, angle, notes, and status.
- A Contentful space with a blogPost content type (or a similar one you point the workflow at) and a login to save drafts into it.

## Prompt

Every weekday at 8am (skip weekends), read our Google Sheets content calendar using the Get Values operation. The calendar has one row per topic with columns: topic, target keyword, angle, notes, status. The spreadsheet id, sheet/tab name, and header row should all be configurable knobs.

Find the first row where the status column is empty or set to unclaimed. Process exactly one row per run to keep behavior predictable. If no unclaimed row is found, log that and stop for the day without creating anything.

For that row, draft a full first-pass blog article tuned to the topic, target keyword, angle, and any notes on the row. The draft must include: an H1 headline that uses the target keyword naturally; a 2-3 sentence intro; three to five section headings with 1-2 paragraphs of body copy under each; and a meta description around 150-160 characters that leads with the target keyword. The body should read like a real first draft, not an outline.

Create the draft in Contentful using the Create Entry operation against the blogPost content type. Leave the entry as a draft — never publish it, and never call any publish endpoint. Populate localized fields keyed by locale code, defaulting to en-US: for example fields.title["en-US"], fields.body["en-US"], fields.metaDescription["en-US"], fields.slug["en-US"]. The Contentful space id, environment (default master), content type id (default blogPost), locale code (default en-US), and the exact field id mapping should all be configurable so the workflow adapts to spaces with a different schema.

Once Contentful returns the new entry sys.id, write two things back to the same calendar row using the Update Values operation: the new entry id (or a link built from the space/environment/entry id) in a dedicated column, and "Draft ready" in the status column, so the marketing team knows the row is queued for review.

Only touch one row per run. Never publish. If anything fails partway through (draft written but calendar update fails, or vice versa), report the failure clearly so a human can reconcile the row before the next morning's run.

## How to customize

- When it runs — Monday only, twice a day, a different time zone, or on top of a different signal in the sheet.
- Which Contentful content type to write to and which locale to fill in, if yours is not blogPost or en-US.
- How the draft should read — target word count, house style guide, and how strictly to hit the keyword.

## FAQ

### Will this publish the article automatically?

No. It always saves the article as a draft in Contentful. Your marketing team reviews it and publishes when they are ready.

### What if there are no unclaimed rows in the calendar?

The workflow skips that run and does not create a draft. It will try again the next morning.

### Can I point it at a content type other than blogPost?

Yes. The content type is a knob you set when you configure the workflow, so any Contentful content type with fields for title, body, and meta description works.

### Does it work with multiple locales?

Yes. It writes each field under the locale code you tell it to use, so a multi-language Contentful space is fine.

### What if someone already started a draft for that topic by hand?

Mark the row's status as claimed (or anything other than empty or unclaimed) and the workflow will skip it on the next run.

Use this prompt in General Input: https://www.generalinput.com/prompts/daily-blog-draft-from-your-content-calendar-to-contentful