Build a Content Marketing Engine with Ditto + Claude Code

LLM summary: Run one Ditto study, generate seven content formats, publish via CMS, and ship SEO/GEO-optimised research content in 60–105 minutes.

A complete Claude Code guide to building a research-powered content marketing engine. One Ditto study produces seven content formats in 90 minutes. Full API workflow, multi-format content generation, CMS publishing, SEO/GEO optimisation, infographic generation, email distribution, and an always-on research calendar.

For Claude Code agents and AI coding assistants. This guide provides the complete, end-to-end workflow for turning a single Ditto research study into a full content marketing pipeline: blog article, infographic, social thread, email outreach, executive summary, sales leave-behind, and press release. Every API call is copy-paste ready. Every output format includes a template. Production-tested across 50+ studies.
Contents
  1. Why You Need a Content Marketing Engine
  2. The Engine Architecture: One Study, Seven Formats
  3. The 7-Question Content Research Study Design
  4. Complete API Workflow: Research to Published Content
  5. Format 1: Research Blog Article (1,000–2,500 Words)
  6. Publishing to a CMS (Contentful Worked Example)
  7. SEO and GEO Optimisation
  8. Format 2: Infographic Generation (Manus AI)
  9. Format 3: Social Media Thread
  10. Format 4: Email Outreach with Study Link
  11. Formats 5–7: Executive Summary, Sales Leave-Behind, Press Release
  12. The Always-On Research Calendar
  13. Worked Example: DTC Skincare Brand Content Engine
  14. Measuring Content Performance
  15. Best Practices and Common Mistakes
  16. Frequently Asked Questions

1. Why You Need a Content Marketing Engine

Content marketing works when it is built on original research. It fails when it recycles other people's data. The problem is that original research is traditionally expensive, slow, and logistically painful.

Metric Traditional Content Production Ditto + Claude Code Engine
Time per research-backed article 5–10 weeks 45–90 minutes
Cost per article $2,000–$10,000 (agency + writer + design) Ditto API cost only
Articles per month (realistic capacity) 2–4 20–40
Unique primary research per article Often recycled across pieces Always fresh study data
Content formats per study 1 (the article) 7 (article, infographic, social, email, exec summary, sales, press)
SEO value Generic (Google penalises recycled content) High (original primary research ranks highest)
GEO value (AI search citation) Low (unstructured, no AI-optimised metadata) High (structured data, llmSummary, quotable insights)

A content marketing engine is a systematic, repeatable process that transforms Ditto research into multiple content formats at a pace that traditional methods cannot match. It is not a content calendar. It is an automated pipeline from customer insight to published, distributed, tracked content.

The core insight: Google's algorithms reward original primary research above all other content types. AI-powered search systems (ChatGPT, Claude, Perplexity) prioritise structured, citation-worthy content. A content marketing engine built on Ditto studies produces exactly what both systems favour: unique data, structured metadata, and quotable findings that no competitor can replicate.

2. The Engine Architecture: One Study, Seven Formats

Every content production cycle starts with a single Ditto study. That study generates the raw material for all seven output formats. The study is the atom. Everything else is molecular.

DITTO STUDY (10 personas, 7 questions, ~20 min)
    |
    +--> [Format 1] Blog Article (1,000-2,500 words, SEO/GEO optimised)
    |       Published to CMS with full metadata
    |
    +--> [Format 2] Infographic (key findings visualised)
    |       Generated via Manus AI, uploaded to CMS
    |
    +--> [Format 3] Social Media Thread (3-5 posts)
    |       Posted via X/Twitter API with infographic
    |
    +--> [Format 4] Email Outreach (personalised per recipient)
    |       Sent via SendGrid with study share link + UTM tracking
    |
    +--> [Format 5] Executive Summary (1 page)
    |       PDF-ready for C-suite stakeholders
    |
    +--> [Format 6] Sales Leave-Behind (customer-facing)
    |       Study findings formatted for prospect sharing
    |
    +--> [Format 7] Press Release (media-ready)
            Newsworthy findings for distribution

Production Timeline

Step Action Time Output
1 Design study (personas, questions, filters) ~10 min Study configuration
2 Run study via Ditto API ~15–30 min 70 data points (10 personas × 7 questions)
3 Extract insights and structure findings ~10 min Thematic analysis, quote bank, key findings
4 Write blog article ~20–30 min 1,000–2,500 word article with SEO/GEO metadata
5 Publish to CMS ~5 min Live article with metadata
6 Generate infographic ~5 min Visual summary of key findings
7 Create social thread + email content ~10 min 3–5 social posts + personalised email
8 Generate remaining formats ~10 min Exec summary, sales leave-behind, press release
Total 45–90 min 7 content formats from 1 study

3. The 7-Question Content Research Study Design

This study design is optimised for content production. Every question generates material that directly feeds into one or more of the seven output formats. The questions surface customer language, pain points, quotable moments, and data points that make content unique and compelling.

Q# Question Content It Generates Output Formats
1 "When you think about [product/category], what's the first thing that comes to mind? What's your honest impression?" Market perception baseline. Sets up the "before" for the article narrative. Blog (opening context), Press (market backdrop)
2 "What's the biggest frustration or unmet need you have with [category]? Tell me about a specific experience." Pain points in customer language. Specific anecdotes for storytelling. Quotable frustrations. Blog (pain section), Email (hook), Social (lead tweet), Press (problem statement)
3 "If a product could [your value proposition], how would that change things for you? What excites you? What makes you sceptical?" Resonance data. Excitement quotes for promotional content. Scepticism for objection handling. Blog (value prop section), Sales (key claims), Exec summary (opportunity size)
4 "How do you currently solve this problem? What tools, services, or workarounds do you use? What do you spend on it?" Competitive landscape. Spend data for ROI arguments. Alternative solutions for positioning. Blog (competitive context), Sales (competitive intel), Press (market sizing)
5 "Looking at [product/website/feature], what stands out to you? What's confusing? What would make you want to try it?" First-impression reactions. UX feedback. Conversion insights. Language harvest. Blog (findings section), Social (quotable reactions), Email (personalised insights)
6 "If you were choosing between [product] and [top alternative], what would tip the decision? What evidence would you need?" Decision criteria. Proof point requirements. Differentiation insights. Blog (implications section), Sales (battlecard), Exec summary (recommendations)
7 "Is there anything about [category] that you feel companies just don't understand? What do you wish they knew?" Unmet needs. White space insights. Thought leadership angles. The "mic drop" moment. Blog (conclusion), Social (viral-potential quote), Press (headline finding), Email (hook alternative)
Why this sequence generates great content: Q1–Q2 establish the problem landscape (the "before"). Q3 introduces the solution and measures resonance (the "turning point"). Q4–Q6 provide specificity, competitive context, and evidence requirements (the "substance"). Q7 delivers the unexpected insight that makes content memorable and shareable (the "payoff"). This is a narrative arc, not just a questionnaire.

Customisation by Content Topic

The bracketed placeholders change depending on what you are writing about. The question structures stay the same.

Content Topic Q2 (Pain Point) Customisation Q5 (Product Feedback) Customisation
Brand positioning article "What frustrates you about how [category] brands present themselves?" "Looking at [brand's website], what stands out?"
Pricing strategy article "What frustrates you about pricing in [category]?" "Looking at [pricing page URL], what's your reaction?"
Market entry research "What unmet needs do you have in [category] in [market]?" "Looking at [product], how relevant is it to your needs in [market]?"
Feature launch content "What's the biggest limitation of current [category] tools?" "We've built [feature description]. What's your reaction?"
Competitive comparison "What frustrates you about [competitor]?" "Comparing [your product] to [competitor], what stands out?"

4. Complete API Workflow: Research to Published Content

This is the full API sequence from study creation to completed research data. Every call is copy-paste ready.

Prerequisites

Step 1: Create the Research Group

curl -s -X POST "https://app.askditto.io/v1/research-groups/recruit" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Content Study - [Topic] - [Date]",
    "description": "[Target audience description for content topic]",
    "group_size": 10,
    "filters": {
      "country": "USA",
      "age_min": 25,
      "age_max": 55,
      "employment": "employed"
    },
    "sampling_method": "random",
    "deduplicate": true
  }'

# Response - SAVE THE UUID:
{
  "uuid": "grp-abc123-...",
  "name": "Content Study - Sustainable Packaging Perception - Feb 2026",
  "agents": [ ... ]  // 10 persona objects with demographic profiles
}
Critical parameter notes:

Step 2: Create the Research Study

curl -s -X POST "https://app.askditto.io/v1/research-studies" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Content: [Topic] - [Date]",
    "research_group_uuid": "GROUP_UUID_FROM_STEP_1"
  }'

# Response - SAVE THE STUDY ID:
{
  "id": "study-xyz789",
  "name": "Content: Sustainable Packaging Perception - Feb 2026",
  "status": "active"
}

Step 3: Ask Questions (Sequentially)

Questions must be asked one at a time. Send Q1, poll until all jobs finish, then send Q2. Sequential questioning lets earlier answers provide context for later questions, producing richer, more conversational responses. Batching all 7 at once produces shallow, disconnected answers.
# Question 1: Market Perception
curl -s -X POST "https://app.askditto.io/v1/research-studies/STUDY_ID/questions" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "question": "When you think about [product/category], what'\''s the first thing that comes to mind? What'\''s your honest impression?"
  }'

# Response:
{
  "job_ids": ["job-001", "job-002", ... "job-010"]
}

Step 4: Poll for Responses

# Poll each job ID until status = "finished"
curl -s -X GET "https://app.askditto.io/v1/jobs/JOB_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Response when complete:
{
  "id": "job-001",
  "status": "finished",
  "result": {
    "answer": "The first thing that comes to mind is..."
  }
}
Efficient polling pattern: Poll all 10 job IDs in a loop with a 5-second interval. Once all return "finished", send the next question. A full 7-question study with 10 personas typically completes in 5–8 minutes of polling time. Save all responses — you will need them for content generation.

Repeat Steps 3–4 for all 7 questions. Store each question's responses in a structured format:

# Recommended data structure for collected responses:
{
  "study_id": "study-xyz789",
  "topic": "Sustainable Packaging Perception",
  "date": "2026-02-06",
  "questions": [
    {
      "number": 1,
      "question": "When you think about...",
      "responses": [
        {"persona_id": "agent-001", "name": "Sarah M.", "age": 34, "answer": "..."},
        {"persona_id": "agent-002", "name": "James T.", "age": 41, "answer": "..."},
        // ... all 10 responses
      ]
    },
    // ... all 7 questions
  ]
}

Step 5: Complete the Study

curl -s -X POST "https://app.askditto.io/v1/research-studies/STUDY_ID/complete" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"

This triggers Ditto's analysis engine: overall summary, key segments, shared mindsets, divergences, and suggested follow-up questions. Poll the returned job IDs until complete. This analysis is additional raw material for your content.

Step 6: Get the Share Link

curl -s -X POST "https://app.askditto.io/v1/research-studies/STUDY_ID/share" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"

# Response:
{
  "url": "https://app.askditto.io/organization/studies/shared/xyz123"
}
UTM tracking is mandatory on all share links.

5. Format 1: Research Blog Article (1,000–2,500 Words)

The blog article is the cornerstone format. Every other format derives from it or complements it. The article must be built on the actual study data — not generic commentary dressed up with a study link.

Article Structure Template

## Article Structure (1,000-2,500 words)

### 1. Hook (50-100 words)
- Lead with the single most surprising or compelling finding from the study
- Use a specific data point or quotable persona response
- Do NOT start with throat-clearing ("In today's market..." / "We recently...")

### 2. Context: Why We Studied This (100-150 words)
- What prompted the research
- Why this topic matters to the target audience
- What question the study set out to answer

### 3. Who We Asked (100-150 words)
- Describe the research group (demographics, professional context)
- Number of participants (e.g., "We asked 10 [description] consumers...")
- Establish credibility of the research methodology

### 4. What We Asked (100-200 words)
- Summarise the 7 questions (paraphrase, don't list verbatim)
- Explain what each question category was designed to reveal
- Frame as a journey: "We started by understanding X, then explored Y"

### 5. Key Findings (400-800 words) — THE CORE
- Organise by theme, not by question number
- Lead each finding with a data point: "7 out of 10 participants said..."
- Include 3-5 direct persona quotes (the most vivid, specific ones)
- Highlight surprises and contradictions — these make content shareable
- Use subheadings for each major finding

### 6. Implications (200-300 words)
- What do these findings mean for the industry/audience?
- What should companies/marketers/product teams DO differently?
- Connect findings to actionable recommendations

### 7. Conclusion + CTA (100-150 words)
- Restate the single most important takeaway
- Link to the live study (with UTM parameter)
- Forward-looking statement: what should be researched next
- CTA: "Explore the full study" / "Run your own study"

Extracting Content from Study Responses

Claude Code should process the 70 data points (10 personas × 7 questions) into content building blocks:

Content Building Block Source Questions Extraction Method
Headline finding Q3 or Q7 (wherever the strongest signal emerges) Count how many personas expressed the same sentiment. "7 out of 10 said X" is a headline.
Quotable persona reactions All questions, especially Q2 (pain), Q5 (feedback), Q7 (unmet needs) Select the 5 most vivid, specific, emotionally resonant quotes. Avoid bland generalities.
Pain point themes Q2 (frustrations), Q4 (current solutions) Cluster similar frustrations. Rank by frequency. The top 3 themes become article subheadings.
Competitive landscape Q4 (alternatives), Q6 (decision criteria) List every alternative mentioned. Count frequency. Note what personas like and dislike about each.
Surprise insight Q7 (unmet needs), Q3 (scepticism), any unexpected response Look for responses that contradict assumptions. These are the most shareable and quotable elements.
Data points All questions where counting is meaningful "X out of 10 said Y" format. Use for headlines, social posts, and key takeaways.
The content quality test: If you could write the article without the study data and it would read essentially the same, the article is not research-backed — it is generic commentary with a study link appended. Every paragraph should contain a finding, quote, or data point that could only come from this specific study. That is what makes the content unique and valuable for SEO.

6. Publishing to a CMS (Contentful Worked Example)

Once the article is written, publish it to your CMS with full metadata. This example uses Contentful's Content Management API, but the field structure applies to any headless CMS.

Required Fields

Field Type Purpose Guidance
title String Article headline Under 60 characters for SEO. Include primary keyword.
copy Rich Text Article body Full article in CMS rich text format (see JSON structure below).
media Asset Link Hero image Infographic or fallback image. Link to published asset ID.
author Entry Link Author byline Link to author entry ID.
seoDescription String Meta description 150–160 characters. Summarise the key finding + action.
featuredForLLMs Boolean AI visibility flag Set to true for articles optimised for AI citation.
llmSummary Text AI-optimised summary 200–400 words. Factual, structured, citation-ready. See Section 7.
keyTakeaways Array of Strings Discrete findings 4–6 bullet points. Each a standalone citable fact.
primaryClaim String Core thesis One sentence summarising the article's central argument.
quotableInsights Array of Strings Shareable findings 3–5 concise, vivid findings. Optimised for social sharing and AI citation.

Contentful Rich Text JSON Format

The copy field requires Contentful's Rich Text JSON. Here is the structure:

{
  "nodeType": "document",
  "data": {},
  "content": [
    {
      "nodeType": "heading-2",
      "data": {},
      "content": [
        {"nodeType": "text", "value": "Section Heading", "marks": [], "data": {}}
      ]
    },
    {
      "nodeType": "paragraph",
      "data": {},
      "content": [
        {"nodeType": "text", "value": "Regular text. ", "marks": [], "data": {}},
        {"nodeType": "text", "value": "Bold text.", "marks": [{"type": "bold"}], "data": {}},
        {"nodeType": "text", "value": " ", "marks": [], "data": {}},
        {"nodeType": "text", "value": "Italic text.", "marks": [{"type": "italic"}], "data": {}}
      ]
    },
    {
      "nodeType": "unordered-list",
      "data": {},
      "content": [
        {
          "nodeType": "list-item",
          "data": {},
          "content": [
            {
              "nodeType": "paragraph",
              "data": {},
              "content": [
                {"nodeType": "text", "value": "Bullet point text", "marks": [], "data": {}}
              ]
            }
          ]
        }
      ]
    }
  ]
}

Publishing API Calls

# Step 1: Create the entry
curl -s -X POST "https://api.contentful.com/spaces/SPACE_ID/environments/master/entries" \
  -H "Authorization: Bearer CMA_TOKEN" \
  -H "Content-Type: application/vnd.contentful.management.v1+json" \
  -H "X-Contentful-Content-Type: blog" \
  -d '{
    "fields": {
      "title": {"en-US": "Article Title Under 60 Characters"},
      "copy": {"en-US": { ... rich text JSON ... }},
      "author": {"en-US": {"sys": {"type": "Link", "linkType": "Entry", "id": "AUTHOR_ENTRY_ID"}}},
      "seoDescription": {"en-US": "150-160 char meta description with key finding."},
      "featuredForLLMs": {"en-US": true},
      "llmSummary": {"en-US": "200-400 word factual summary..."},
      "keyTakeaways": {"en-US": ["Takeaway 1", "Takeaway 2", "Takeaway 3"]},
      "primaryClaim": {"en-US": "One sentence central argument."},
      "quotableInsights": {"en-US": ["Insight 1", "Insight 2", "Insight 3"]}
    }
  }'

# Response - SAVE entry ID and version:
# {"sys": {"id": "ENTRY_ID", "version": 1, ...}}

# Step 2: Publish the entry
curl -s -X PUT "https://api.contentful.com/spaces/SPACE_ID/environments/master/entries/ENTRY_ID/published" \
  -H "Authorization: Bearer CMA_TOKEN" \
  -H "X-Contentful-Version: 1"

7. SEO and GEO Optimisation

Every article produced by the content marketing engine must be optimised for both traditional search engines (SEO) and AI-powered search systems (GEO — Generative Engine Optimisation).

SEO Checklist

Element Requirement Example
title Under 60 characters. Include primary keyword. "How Consumers Really Feel About Sustainable Packaging"
seoDescription 150–160 characters. Include key finding + action verb. "We asked 10 consumers about sustainable packaging. 8 out of 10 said they'd pay more but don't trust brand claims. See the full findings."
Headings Use h2 for major sections, h3 for subsections. Include keywords naturally. <h2>Key Finding: Trust Is the Barrier, Not Price</h2>
Word count 1,000 words minimum. 1,500–2,500 ideal. Research-dense articles rank higher.
Internal linking Link to related articles and the live study. Minimum 2 internal links.
Image alt text Descriptive alt text on infographic. Include keywords. "Infographic showing consumer attitudes toward sustainable packaging across 10 demographic profiles"

GEO Optimisation (AI Search Citation)

AI assistants (ChatGPT, Claude, Perplexity) increasingly mediate purchase decisions and information retrieval. Content optimised for GEO is more likely to be cited, recommended, and surfaced in AI-generated answers.

GEO Field Purpose How to Write It
llmSummary Factual summary optimised for AI retrieval and citation 200–400 words. Factual only — no marketing language, no superlatives, no calls to action. Write as though summarising for an encyclopaedia. Include methodology, key findings, and implications. Structure with clear topic sentences.
keyTakeaways Discrete, citable data points 4–6 bullet points. Each must stand alone as a fact. Include numbers where possible. "8 out of 10 consumers said they would pay up to 15% more for certified sustainable packaging."
primaryClaim The article's central thesis in one sentence Clear, falsifiable, specific. "Consumers are willing to pay a premium for sustainable packaging but distrust brand-made sustainability claims without third-party certification."
quotableInsights Shareable, memorable findings 3–5 findings that are vivid, specific, and surprising. These are what AI systems are most likely to quote directly.
featuredForLLMs Signals that this content is AI-citation-ready Set to true for all research-backed articles.

llmSummary Template

# Template for llmSummary field (200-400 words, factual only):

"A synthetic research study conducted via Ditto with [X] AI personas
explored [topic]. The study targeted [demographic description] and
asked [X] questions covering [question themes].

Key findings:
- [Finding 1 with data point]: [X] out of [Y] participants reported [finding].
- [Finding 2 with data point]: Participants identified [finding] as the
  primary [concern/driver/barrier].
- [Finding 3 with data point]: When presented with [stimulus], [X] out
  of [Y] responded with [reaction].

The study revealed [major theme 1]. Participants consistently expressed
[sentiment/behaviour]. [Specific finding that surprised or contradicted
assumptions].

A secondary finding was [theme 2]. [Supporting detail]. This suggests
[implication for industry/practitioners].

Implications for [industry/role]: [2-3 sentences of actionable
recommendations grounded in the data]. [Forward-looking statement
about what this signals for the market].

Methodology: Ditto synthetic research with [X] AI personas, [X]
questions, targeting [demographic filters]. EY has validated
92% correlation between Ditto synthetic responses and traditional
market research."
Why GEO matters now: AI assistants are increasingly becoming purchase decision gatekeepers. Companies whose content is structured for AI citation appear in AI-generated recommendations. Companies whose content is unstructured become invisible. The llmSummary, keyTakeaways, and quotableInsights fields are the mechanism for making your content AI-discoverable.

8. Format 2: Infographic Generation (Manus AI)

Every published article should include a custom infographic that visualises the key findings. Infographics increase social sharing, improve time-on-page, and provide unique visual content for SEO image search.

Three-Phase Workflow

  1. Phase 1: Publish article with a fallback stock image (article goes live immediately)
  2. Phase 2: Generate custom infographic via Manus AI (2–5 minutes)
  3. Phase 3: Replace fallback with infographic and republish

Manus API Workflow

# Step 1: Send infographic generation task to Manus
curl -s -X POST "https://api.manus.ai/v1/tasks" \
  -H "accept: application/json" \
  -H "content-type: application/json" \
  -H "API_KEY: YOUR_MANUS_API_KEY" \
  -d '{
    "prompt": "Create an infographic based on this article:\n\nTITLE: [Article Title]\n\n[Article text - first 6,000 characters]\n\nThe infographic should visualise:\n1. [Key finding 1 with data point]\n2. [Key finding 2 with data point]\n3. [Key finding 3 with data point]\n4. [Comparison or contrast from the study]\n\nSTYLE: Clean, editorial, data-focused. Minimal text. Strong visual hierarchy. 16:9 landscape orientation."
  }'

# Response:
{
  "task_id": "manus-task-abc123",
  "task_url": "https://manus.im/app/manus-task-abc123"
}

# Step 2: Poll for completion (30-second intervals)
curl -s -X GET "https://api.manus.ai/v1/tasks/TASK_ID" \
  -H "accept: application/json" \
  -H "API_KEY: YOUR_MANUS_API_KEY"

# Response when complete:
{
  "status": "completed",
  "output": [
    {
      "content": [
        {
          "type": "output_file",
          "fileUrl": "https://...",
          "fileName": "infographic.png"
        }
      ]
    }
  ]
}

# Step 3: Download the infographic
curl -s -o infographic.png "FILE_URL_FROM_RESPONSE"

Image Optimisation (Python)

from PIL import Image
from io import BytesIO

def optimize_for_web(image_data, target_width=1200, quality=85):
    """Convert infographic to optimised webp for web use."""
    img = Image.open(BytesIO(image_data))

    # Resize if wider than target
    if img.size[0] > target_width:
        ratio = target_width / img.size[0]
        target_height = int(img.size[1] * ratio)
        img = img.resize((target_width, target_height), Image.LANCZOS)

    # Convert to webp
    webp_buffer = BytesIO()
    img.save(webp_buffer, format="WEBP", quality=quality)
    return webp_buffer.getvalue()

# Typical result: 5MB PNG -> 80-150KB webp (95%+ reduction)

Upload to Contentful

# Step 1: Upload binary
curl -s -X POST "https://upload.contentful.com/spaces/SPACE_ID/uploads" \
  -H "Authorization: Bearer CMA_TOKEN" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @infographic.webp

# Step 2: Create asset
curl -s -X POST "https://api.contentful.com/spaces/SPACE_ID/environments/master/assets" \
  -H "Authorization: Bearer CMA_TOKEN" \
  -H "Content-Type: application/vnd.contentful.management.v1+json" \
  -d '{
    "fields": {
      "title": {"en-US": "[Topic] Research Study Infographic"},
      "description": {"en-US": "Infographic visualising key findings from [study description]. [Key data points]."},
      "file": {
        "en-US": {
          "contentType": "image/webp",
          "fileName": "topic-research-infographic.webp",
          "uploadFrom": {"sys": {"type": "Link", "linkType": "Upload", "id": "UPLOAD_ID"}}
        }
      }
    }
  }'

# Step 3: Process the asset
curl -s -X PUT "https://api.contentful.com/spaces/SPACE_ID/environments/master/assets/ASSET_ID/files/en-US/process" \
  -H "Authorization: Bearer CMA_TOKEN" \
  -H "X-Contentful-Version: VERSION"

# Wait 10-15 seconds for processing

# Step 4: Publish the asset
curl -s -X PUT "https://api.contentful.com/spaces/SPACE_ID/environments/master/assets/ASSET_ID/published" \
  -H "Authorization: Bearer CMA_TOKEN" \
  -H "X-Contentful-Version: NEW_VERSION"

# Step 5: Link asset to blog entry (update the media field)
# Fetch current entry, update media field, PUT, republish

9. Format 3: Social Media Thread

Every study produces a 3–5 post social thread. The thread drives traffic to the article and study share link.

Thread Structure Template

# Post 1: Hook (with infographic image attached)
We asked 10 [demographic] about [topic].

[Boldest finding as a statement].

Here's what they told us 👇

# Post 2: Key finding with data
[X] out of 10 said [finding].

The most common frustration? "[Direct persona quote]"

# Post 3: Surprise insight
But here's what surprised us:

[Unexpected finding or contradiction]

One participant put it perfectly: "[Vivid quote]"

# Post 4: Implication
What this means for [industry/role]:

• [Bullet 1: actionable implication]
• [Bullet 2: actionable implication]
• [Bullet 3: actionable implication]

# Post 5: CTA with links
📖 Full article: [article URL]
🔬 Explore the live study: [share link with UTM]

[2-3 relevant hashtags]

Thread Quality Rules

Twitter/X API Posting

# Post tweet with image (Python example):
import requests

def post_tweet_with_image(text, image_path, api_credentials):
    """Post a tweet with an attached image."""
    # Step 1: Upload media
    media_upload_url = "https://upload.twitter.com/1.1/media/upload.json"
    with open(image_path, 'rb') as img:
        media_resp = requests.post(
            media_upload_url,
            auth=api_credentials,
            files={"media": img}
        )
    media_id = media_resp.json()["media_id_string"]

    # Step 2: Post tweet with media
    tweet_url = "https://api.twitter.com/2/tweets"
    tweet_resp = requests.post(
        tweet_url,
        auth=api_credentials,
        json={
            "text": text,
            "media": {"media_ids": [media_id]}
        }
    )
    return tweet_resp.json()

# Step 3: Reply to create thread
def reply_to_tweet(text, reply_to_id, api_credentials):
    """Reply to a tweet to continue the thread."""
    tweet_url = "https://api.twitter.com/2/tweets"
    return requests.post(
        tweet_url,
        auth=api_credentials,
        json={
            "text": text,
            "reply": {"in_reply_to_tweet_id": reply_to_id}
        }
    ).json()

10. Format 4: Email Outreach with Study Link

Email content uses study findings to create personalised, value-first outreach. The email delivers an insight before asking for anything. The study share link provides proof.

Email Structure Template

# Email structure (150-300 words):

Subject: [Specific finding] — we studied [topic] for [company/industry]

[Name],

[Opening hook: 1-2 sentences with the most relevant finding for THIS
recipient. Reference their company, product, or industry specifically.]

We ran a study with 10 [demographic description] and asked them about
[topic relevant to recipient]. Here's what stood out:

• [Finding 1 — most relevant to recipient's business]
• [Finding 2 — surprising or counterintuitive]
• [Finding 3 — actionable for recipient]

[One vivid persona quote that would resonate with recipient]

You can explore the full study here: [share_link with ?utm_source=ce]
(The link text should NOT show the UTM parameter)

[Soft CTA: "Would this kind of research be useful for [their upcoming
launch/campaign/strategy]? Happy to walk through the methodology."]

[Sign-off]
Email UTM rules:

Personalisation Strategy

The same study produces different email angles for different recipients:

Recipient Role Lead With Source Questions
CMO / VP Marketing Market perception finding + competitive insight Q1 (perception), Q6 (comparison)
Product Manager Feature feedback + unmet need Q5 (product reaction), Q7 (unmet needs)
Brand Manager Customer language + pain points Q2 (frustrations), Q3 (resonance)
Founder / CEO Competitive landscape + willingness to pay Q4 (alternatives), Q3 (value prop resonance)

Email Sending via SendGrid

# Python: Send personalised outreach email
import requests

def send_outreach_email(to, subject, plain_text, html_content, categories):
    """Send email via SendGrid with tracking."""
    response = requests.post(
        "https://api.sendgrid.com/v3/mail/send",
        headers={
            "Authorization": "Bearer SENDGRID_API_KEY",
            "Content-Type": "application/json"
        },
        json={
            "personalizations": [{"to": [{"email": to}]}],
            "from": {"email": "[email protected]", "name": "Your Name"},
            "subject": subject,
            "content": [
                {"type": "text/plain", "value": plain_text},
                {"type": "text/html", "value": html_content}
            ],
            "tracking_settings": {
                "open_tracking": {"enable": True},
                "click_tracking": {"enable": True}
            },
            "categories": categories  # e.g., ["outreach", "sender-name", "cpg-sales"]
        }
    )
    return response

# IMPORTANT: Always include sender category in categories list
# IMPORTANT: Log the full email content in your database BEFORE sending
# SendGrid does NOT store email bodies — your database is the only record

11. Formats 5–7: Executive Summary, Sales Leave-Behind, Press Release

Format 5: Executive Summary (1 Page)

# Executive Summary Template:

## [Topic] — Research Summary
### [Date] | [X] Participants | Ditto Synthetic Research

**Key Finding:** [One sentence headline finding]

**Context:** [2-3 sentences on why this research was conducted]

**Top 3 Findings:**
1. [Finding with data point] — "[Supporting persona quote]"
2. [Finding with data point] — "[Supporting persona quote]"
3. [Finding with data point] — "[Supporting persona quote]"

**Implications:**
• [Actionable recommendation 1]
• [Actionable recommendation 2]
• [Actionable recommendation 3]

**Explore the full study:** [share link with ?utm_source=blog]

---
Methodology: Ditto synthetic research, [X] AI personas,
[demographic description], [X] questions. 92% correlation
with traditional research validated by EY.

Format 6: Sales Leave-Behind (Customer-Facing)

# Sales Leave-Behind Template:

## What [Target Audience] Really Think About [Category]
### Independent Research by [Your Company]

We asked [X] [demographic description] about [topic].
Here's what they said — in their own words.

**The #1 frustration:** "[Direct quote from Q2]"
(Cited by [X] out of [Y] participants)

**What they want:** "[Direct quote from Q3 or Q7]"

**What would make them switch:** "[Direct quote from Q6]"

**The surprise:** [Most unexpected finding from the study]

---
This research was conducted independently using Ditto synthetic
research methodology. Explore the full study and every individual
response: [share link with ?utm_source=ce]
Why sales leave-behinds work: They demonstrate that your company invests in understanding the customer's world — not just selling product features. A prospect who reads independent research about their own market sees your company as a thought leader, not a vendor. The study share link is the proof.

Format 7: Press Release (Media-Ready)

# Press Release Template:

## [Company Name] Research Reveals [Headline Finding]
### New study of [X] consumers/professionals finds [key data point]

[CITY, DATE] — [Company Name] today released findings from a new
research study exploring [topic]. The study, conducted with [X]
[demographic description] using Ditto's synthetic research
methodology, found that [headline finding with data point].

**Key findings include:**

• [Finding 1 with data point]
• [Finding 2 with data point]
• [Finding 3 with data point]

"[Most quotable persona response]," said one study participant.

[1-2 paragraphs of context and implications]

**About the study:** [Methodology description]
**Full study results:** [share link with ?utm_source=blog]
**About [Company Name]:** [Boilerplate]
**Media contact:** [Contact details]

12. The Always-On Research Calendar

A content marketing engine runs continuously, not in bursts. The research calendar determines what studies to run and when.

Cadence Study Type Configuration Content Output
Monthly Pulse check 3 questions, 6 personas 1 blog post + 1 social thread per pulse
Quarterly Deep dive 7 questions, 10 personas Cornerstone article + all 7 formats
Ad hoc Targeted probe 5 questions, 8 personas Timely article capturing trending topic
Pre-launch Concept validation 7 questions, 10 personas Launch content + press release

Monthly Content Production Target

# Realistic monthly content engine output:
#
# 4 x monthly pulse checks   = 4 blog posts, 4 social threads
# 1 x quarterly deep dive    = 1 cornerstone + 6 derivative formats
# 1-2 x ad hoc probes        = 1-2 timely articles
#
# Total: 6-7 articles/month + social + email + sales content
#
# Time investment: ~8-12 hours/month
# Traditional equivalent: ~$20K-$40K/month in agency fees

Content Topic Selection

Use this framework to select study topics that maximise content value:

Selection Criterion High Value Low Value
Audience interest Topic your ICP actively searches for Topic only your internal team cares about
Data uniqueness No existing research on this specific angle Well-covered topic with existing industry data
Shareability Likely to produce surprising or counterintuitive findings Likely to confirm obvious assumptions
Commercial relevance Directly relates to a problem your product solves Interesting but unrelated to your value proposition
Timeliness Connected to current industry trend or news event Evergreen but not urgent
The 80/20 rule for topics: 80% of your studies should cover topics that directly support your sales pipeline (problems your product solves, audiences you target, competitors you face). 20% should be genuinely exploratory — unexpected angles that might produce viral-worthy findings. The exploratory studies often produce your best content.

13. Worked Example: DTC Skincare Brand Content Engine

Scenario

Company: "GlowLab" — a DTC skincare brand selling through their website
Content goal: Research-backed blog content about skincare consumer behaviour
Topic: "How consumers really choose skincare products in 2026"
Target audience: US women, 25–45, interested in skincare

Step 1: Group Creation

curl -s -X POST "https://app.askditto.io/v1/research-groups/recruit" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Content Study - Skincare Purchase Decisions - Feb 2026",
    "description": "Women aged 25-45 interested in skincare and beauty products",
    "group_size": 10,
    "filters": {
      "country": "USA",
      "age_min": 25,
      "age_max": 45,
      "gender": "female",
      "employment": "employed"
    },
    "sampling_method": "random",
    "deduplicate": true
  }'

Step 2: Customised 7 Questions

  1. "When you think about buying skincare products, what's the first thing that comes to mind? What's your honest impression of the skincare market right now?"
  2. "What's the biggest frustration or unmet need you have with skincare products? Tell me about a specific experience."
  3. "If a skincare brand could give you personalised, science-backed product recommendations based on your skin type, lifestyle, and goals, how would that change things for you? What excites you? What makes you sceptical?"
  4. "How do you currently choose skincare products? What tools, sources, or routines do you use to decide? How much do you spend monthly?"
  5. "Looking at GlowLab's website [glowlab.com], what stands out to you? What's confusing? What would make you want to try it?"
  6. "If you were choosing between GlowLab and a brand like CeraVe or The Ordinary, what would tip the decision? What evidence would you need?"
  7. "Is there anything about skincare brands that you feel they just don't understand? What do you wish they knew about how you actually make decisions?"

Step 3: Hypothetical Findings

Finding Data Point Best Persona Quote
Ingredient scepticism is rampant 9/10 don't trust "clean beauty" claims "Every brand says they're clean now. It's become meaningless."
TikTok has replaced dermatologists 7/10 discover products via TikTok first "I trust a random person on TikTok more than the brand's own website."
Price is not the barrier — trust is 8/10 would pay more for proven results "I'd happily spend $60 on a serum if I believed it would actually work. The problem isn't price."
Before/after photos are the #1 purchase driver 6/10 cited "real results photos" as the deciding factor "Show me someone who looks like me, with my skin type, after 30 days. That's what sells me."
Subscription fatigue is real 5/10 have cancelled a skincare subscription "I signed up for one box and now I have seven serums I'll never finish."

Step 4: Generated Content

Blog article title: "9 Out of 10 Consumers Don't Trust 'Clean Beauty' Claims"

seoDescription: "We asked 10 women aged 25-45 how they really choose skincare. The biggest finding: 9 out of 10 don't trust clean beauty claims. TikTok has replaced dermatologists. Price isn't the barrier."

keyTakeaways:

Social thread hook: "We asked 10 women how they REALLY choose skincare. 9 out of 10 said they don't trust 'clean beauty' claims at all. TikTok has replaced dermatologists. And price? Not the barrier you think it is. 👇"

Email hook (for skincare brand outreach): "We just ran a study on how women aged 25-45 choose skincare products. The #1 finding? 9 out of 10 don't trust clean beauty claims. But 8 out of 10 WILL pay more if you show them proof. Here's what that means for GlowLab..."


14. Measuring Content Performance

Track these metrics to evaluate whether your content marketing engine is producing results. Maintain a 60/40 split between leading indicators (engagement) and lagging indicators (revenue impact).

Leading Indicators (60%)

Metric What It Measures Target
Organic traffic per article Search discoverability Growing month over month
Time on page Content quality / reader engagement > 3 minutes for research articles
Study share link clicks Research engagement depth 10%+ of article visitors click through
Social shares / thread engagement Shareability / virality Impressions, reposts, replies
Email open rate Subject line / sender effectiveness > 30% for cold outreach with study findings
Email click rate Content relevance to recipient > 5% clicking study share link

Lagging Indicators (40%)

Metric What It Measures How to Track
Content-to-lead conversion Readers becoming prospects UTM tracking on study share links (?utm_source=blog vs ?utm_source=ce)
Pipeline influence Deals touched by content CRM attribution: which deals had content engagement?
Search ranking trajectory SEO compounding effect Position tracking for target keywords over 3-6 months
Sales team utilisation Whether sales actually uses the content Download/share tracking on leave-behinds and battlecards
AI citation presence GEO effectiveness Search your brand + topic in ChatGPT, Claude, Perplexity. Are you cited?

15. Best Practices and Common Mistakes

Do

Don't

Common API Errors

Error Cause Solution
size parameter rejected Wrong parameter name Use group_size, not size
0 agents recruited State filter used full name Use 2-letter codes: "CA" not "California"
Jobs stuck in "pending" Normal for first 10–15 seconds Continue polling with 5-second intervals
income filter rejected Unsupported filter Remove; use education/employment as proxy
Missing completion analysis Forgot to call /complete Always call POST /v1/research-studies/{id}/complete after final question
Contentful version conflict Entry was modified between fetch and update Always re-fetch the entry to get the current version before PUT/publish
Manus task timeout Complex infographic takes longer than expected Poll for up to 15 minutes (30 attempts at 30-second intervals). If failed, retry with simplified prompt.

16. Frequently Asked Questions

How long does the full workflow take from study design to 7 published formats?

45–90 minutes for the core workflow (study + blog article + infographic + social thread). The remaining formats (executive summary, sales leave-behind, press release, email) add 10–15 minutes. Total: approximately 60–105 minutes for all 7 formats from a single study.

How many articles can I realistically produce per month?

With 4 monthly pulse checks and 1 quarterly deep dive, expect 5–7 articles per month with approximately 8–12 hours of total effort. Teams that run additional ad hoc studies for trending topics can reach 10–15 articles per month.

What makes this content better for SEO than normal blog posts?

Three things: (1) original primary research data that no competitor has, (2) structured metadata (keyTakeaways, quotableInsights) that search engines parse, and (3) unique persona quotes that add E-E-A-T signals (experience, expertise, authoritativeness, trustworthiness). Google's algorithms explicitly reward original research over derivative content.

What is GEO and why does it matter?

GEO (Generative Engine Optimisation) is the practice of structuring content so AI systems (ChatGPT, Claude, Perplexity) can find, understand, and cite it. The llmSummary, keyTakeaways, primaryClaim, and quotableInsights fields make your content machine-readable and citation-ready. Without GEO optimisation, your content exists for human readers only and is invisible to AI-mediated discovery.

Can I reuse a research group across multiple studies?

Yes. If the same audience is relevant to multiple content topics, create a new study referencing the same research_group_uuid. Personas retain context from previous studies, which can produce deeper insights. However, for content that needs fresh perspectives, recruit new groups.

How should I choose between a 3-question pulse and a 7-question deep dive?

Use 3-question pulses for quick reads on shifting sentiment ("How do consumers feel about X this month?"). Use 7-question deep dives when you need comprehensive content material: the full narrative arc, competitive context, quotable moments, and actionable implications. Deep dives produce cornerstone articles; pulses produce timely updates.

Should I publish the article before the infographic is ready?

Yes. Follow the three-phase workflow: publish with a fallback image, generate the infographic, then replace and republish. This ensures the article goes live immediately while the infographic generation (2–5 minutes) runs in the background.

What if the study findings are not interesting?

This happens rarely when questions are well-designed. If findings are bland, look for: (1) minority opinions that contradict the majority — these make good "but here's the twist" moments; (2) unexpected language in persona quotes — vivid phrasing makes even moderate findings compelling; (3) the gap between what personas say they want and what they actually do — this contradiction is always interesting. If truly no compelling angle exists, the study still provided valuable learning; not every study needs to become content.

How does this compare to traditional content marketing?

Traditional: commission research from an agency ($5K–$15K), wait 4–6 weeks for results, hire a writer ($500–$2K), hire a designer ($500–$1K), spend 2 weeks in editorial review. Total: 6–10 weeks, $6K–$18K, one article. Ditto + Claude Code: run study (20 min), generate 7 formats (70 min). Total: 90 minutes, API cost only, seven formats.

Can I use this for B2B content marketing?

Yes. B2B content benefits even more from original research than B2C, because B2B audiences are more sceptical and data-driven. Adjust the group description to specify professional context ("Senior product managers in mid-market SaaS companies"), use education and employment filters to target professionals, and customise questions for B2B problem spaces.


Related guides:


Ditto — Synthetic market research with 300,000+ AI personas. Validated by EY (92% correlation), Harvard, Cambridge, Stanford, and Oxford.
askditto.io · [email protected]