Create · Product guide

Build programmatic content

Combine reusable templates with structured rows or value combinations while previewing quality, scale, and cost.

12 min readSource on GitHub ↗

Choose the right dimensional model

Programmatic is for repeatable page families, not a larger Campaign. A zero-variable list belongs in Campaigns. One variable fits patterns such as how many calories in {{food}}. Two variables fit controlled combinations such as {{nutrient}} in {{food}}.

Variables use double braces and must be present in every generated row. BlogFactory rejects missing values and duplicate materialized titles before launch.

0D
Flat list → use Campaigns
1D
One variable → Programmatic
2D
Two variables → combinations or matched rows
Maximum
1,000 materialized rows per programmatic campaign

Choose how data becomes pages

All combinations creates the Cartesian product of each variable list: six nutrients × 100 foods becomes 600 rows. Match rows keeps each imported row together, which is safer for briefs, location datasets, product attributes, and facts that must not be recombined.

Import CSV, TSV, or XLSX data, paste a table, load a saved dataset, or fetch an allowed CSV URL. Preview the parsed columns and rows before attaching them to the template.

Design the template

  1. Write a unique title template containing the required variables.
  2. Add ordered sections with a heading, instructions, and optional minimum and maximum word targets.
  3. Mark FAQ or answer sections as snippable only when the content structure supports it.
  4. Inspect the preview with real rows, not placeholder labels.
  5. Use the readiness score and quick wins to fix missing variables, weak structure, or incomplete word targets.

Launch and review

The launch summary shows article count, variable count, data mode, voice, model, word range, and estimated cost. High estimates require confirmation.

Once launched, follow the run in Campaigns. Each row becomes its own BlogFactory draft and must pass editorial review and CMS preflight independently.