Skip to main content

Documentation Index

Fetch the complete documentation index at: https://slatehq.com/docs/llms.txt

Use this file to discover all available pages before exploring further.

Overview

The Track Content Update block writes an entry to Slate’s Content Updates ledger from a workflow run. Use it when a workflow ships content to a destination Slate does not natively detect — for example, a custom CMS, a static site generator, or a sheet-driven publishing flow — and you still want the update to appear in Update History and in reporting. For Webflow or WordPress publishing, the Webflow block already records updates automatically. Use this block when you need explicit, custom control over what gets logged.

Configuration

Page URL

The canonical URL of the page being published, refreshed, or drafted. This field supports placeholders, so you can pass a URL produced by an earlier step:
{{step_1.output.published_url}}
The URL is required. If it resolves to an empty string at runtime, the block fails.

Update Type

Choose what kind of event to record.
OptionMeaning
PublishA new page went live
RefreshAn existing page was updated
DraftThe page was saved but not yet live
Drafts are kept in the ledger but do not affect daily publish or refresh counts.

Metadata

Optional JSON object merged into the entry. Use it to record context that downstream blocks or reports may want to read. Example:
{
  "phase": "phase-3",
  "from": "{{ input.source }}",
  "rewrite_model": "claude-sonnet-4-6"
}
The block automatically adds reserved fields to the metadata: workflow_id, step_id, block_type, and node_id. You do not need to set these. Metadata must be a JSON object. Arrays and primitive values are rejected.

Output

The block returns a content_update object you can reference in later steps:
FieldDescription
content_update.event_idUnique ID for the recorded event
content_update.daily_update_idID of the daily rollup row, if applicable
content_update.stateCurrent state of the entry
content_update.dedupedtrue if the event matched an existing entry and was not duplicated
content_update.urlThe URL that was recorded
content_update.update_typepublish or refresh
content_update.is_drafttrue if the entry is a draft
content_update.occurred_atThe recorded event timestamp
content_update.metadataThe metadata object, including reserved fields
Reference in a later step:
{{step_2.output.content_update.event_id}}

How it appears in Update History

Entries created by this block show up in the Pages > Update History tab with:
  • Source column: Workflow, followed by the workflow’s name (for example, Workflow · Weekly Refresh).
  • Date of update column: the timestamp when the block ran, unless you pass a different value through metadata.

Examples

Log a refresh after rewriting a page

Run an LLM block to rewrite a page, push the new HTML to your CMS with a Call API block, then track the result.
  1. LLM block — generate the new content.
  2. Call API block — POST the content to your CMS.
  3. Track Content Update block:
    • Page URL: {{step_1.output.url}}
    • Update Type: Refresh
    • Metadata: { "rewrite_model": "claude-sonnet-4-6" }

Record drafts from a sheet-driven workflow

When you queue pages in a Slate Sheet and a teammate reviews each draft before publishing, log the draft state from the workflow:
  1. Loop block — iterate over sheet rows.
  2. Track Content Update block:
    • Page URL: {{loop.item.url}}
    • Update Type: Draft
    • Metadata: { "reviewer": "{{loop.item.reviewer}}" }
The drafts appear in Update History but stay out of your daily publish counts until you log a follow-up Publish event.

Branch on deduplication

If you re-run a workflow on the same URL on the same day, the block deduplicates instead of creating a second entry. Use the deduped flag to skip work in later steps:
{{step_2.output.content_update.deduped}}
Pair it with the If/Else block to avoid sending duplicate notifications.

Tips

  • Use canonical URLs (no tracking parameters) so entries match across workflow runs and manual logs.
  • Pass a value from an earlier step into Page URL rather than hardcoding it — this keeps the block reusable across pages.
  • If your workflow publishes to multiple URLs, wrap the block in a Loop and pass each URL through.

What’s next