CSV & Template Variables

Overview

Publish Owl lets you import keywords and data from CSV files. Every column in your CSV automatically becomes a template variable you can use in prompts, titles, image prompts, and meta descriptions using the {{column_name}} syntax.

Importing a CSV

In the keyword table of your workflow editor, click Import CSV and select your file. The first row is treated as column headers.

Example CSV:
{`keyword,notes,slug,categories,product_name,affiliate_url
best headphones,Focus on wireless,best-wireless-headphones,Reviews,Sony WH-1000XM5,https://...
best laptops,For students,best-laptops-students,"Reviews, Guides",,`}

The keyword column maps to the keyword field. The notes column maps to the notes field. All other columns become custom template variables.

Reserved Column Names

These column names have special behavior beyond being usable as template variables:

Column Behavior
slug Overrides the auto-generated URL slug when publishing. Non-ASCII characters (e.g. Cyrillic) are preserved.
categories Sets per-article WordPress categories. Accepts comma-separated names or numeric IDs. Missing categories are created automatically.
featured_image URL of a featured image to use for the article.
reference_images Comma-separated image URLs fed to AI image generators as visual references (for both featured and in-article images).
featured_reference_images Reference images for featured image generation only.
in_article_reference_images Reference images for in-article image generation only.
group Controls product roundup grouping. Rows with the same keyword and group value are merged into one job.

Using Variables in Prompts

Reference any column value with double curly braces. Variables work in:

  • Workflow step prompts
  • Title templates/prompts
  • Image generation prompts
  • Meta description templates
  • Webhook URLs
{`Write a review of {{product_name}}.
The article should target the keyword "{{keyword}}".
Include this affiliate link: {{affiliate_url}}

Additional context: {{notes}}`}

Keyword Modifiers

Transform keyword values using modifier syntax. Useful for building URLs, extracting parts of multi-word keywords, or reformatting text.

Modifier Input Output
{{keyword}} new homes for sale chicago new homes for sale chicago
{{keyword:slug}} new homes for sale chicago new-homes-for-sale-chicago
{{keyword:first}} new homes for sale chicago new
{{keyword:last}} new homes for sale chicago chicago
{{keyword:word:2}} new homes for sale chicago homes
{{keyword:words:2-4}} new homes for sale chicago homes for sale
{{keyword:from:2}} new homes for sale chicago homes for sale chicago
{{keyword:to:3}} new homes for sale chicago new homes for
{{keyword:notlast:1}} new homes for sale chicago new homes for sale

Modifiers work with any variable, not just keyword. For example, {{city:slug}} would slugify a city column value.

Product Roundups

When multiple CSV rows share the same keyword, they are automatically grouped into a single job. All rows' column data is collected into a product list.

{`keyword,product_name,product_price,product_url
best headphones,Sony WH-1000XM5,$348,https://...
best headphones,AirPods Max,$549,https://...
best headphones,Bose QC Ultra,$429,https://...`}

Access grouped data in your prompts:

  • {{products}} — A formatted text block listing all grouped products and their fields
  • {{product_1_product_name}}, {{product_2_product_price}}, etc. — Indexed access to individual product fields (1-based)
Tip: Add a group column to control grouping explicitly. Rows with the same keyword but different group values become separate articles.

Google Sheets (pSEO Mode)

In pSEO mode, you can connect a public Google Sheet as your data source instead of uploading a CSV. The sheet must be set to "Anyone with the link can view".

  1. Open your Google Sheet and click Share
  2. Set General access to "Anyone with the link" (Viewer)
  3. Copy the URL from your browser
  4. Paste into the Google Sheets field in the Data Source tab
  5. Click Load Sheet to preview, then Use This Sheet

If your data is on a specific tab, navigate to that tab before copying the URL. Column types (text, number, image URL, boolean) are auto-detected.

Was this helpful?