Back to blog
    Fine-Tuned Copywriting Models for Agency Clients: Ad Copy That Actually Converts
    marketingcopywritingad-copyfine-tuningperformancesegment:agency

    Fine-Tuned Copywriting Models for Agency Clients: Ad Copy That Actually Converts

    Generic AI ad copy is mediocre because it has never seen your client's winning variants. A copywriting model trained on historical performance data generates copy calibrated to convert — not just grammatically correct.

    EErtas Team·

    Performance marketing agencies live and die by conversion rates. Generic AI tools produce ad copy that passes a readability test but does not pass a ROAS test. The reason: they have never seen which words convert for this brand, this audience, this product.

    A fine-tuned model trained on the brand's historical ad performance data learns the vocabulary, the angles, and the formats that move this specific audience. It generates copy calibrated to convert, not just grammatically correct.

    Why Generic AI Fails at Performance Copy

    Generic AI has been trained on text from the internet. The internet contains winning copy and losing copy in equal measure (nobody posts "this is bad copy that failed"). The model has no signal on what actually converts.

    Give GPT-4 a prompt to write Facebook ad copy for a DTC supplement brand and it produces copy that sounds like a DTC supplement brand. It does not know:

    • Which emotional triggers this specific audience responds to
    • Whether urgency or social proof converts better for this product
    • What vocabulary the winning variants used vs the losing ones
    • Whether short or long copy outperforms for this placement

    Your client's Meta Ads Manager has that data. A fine-tuned model that learns from it knows what GPT-4 cannot.

    What Goes in the Training Dataset

    Source: Meta Ads Manager / Google Ads export — historical ad performance data

    Required fields per ad:

    • Ad copy (headline + body + CTA)
    • Performance tier: High (ROAS > target), Medium, Low (ROAS < break-even)
    • Ad format (single image, carousel, video script, responsive)
    • Audience segment
    • Offer type (discount, free trial, social proof lead, education lead)

    Label construction:

    • High-performing ads → positive training examples (this is what to write)
    • Low-performing ads → negative examples OR exclusions (do not train on these)

    Include the performance context in the prompt so the model learns to distinguish:

    {"messages": [
      {"role": "system", "content": "You are a performance copywriter for [Brand], a DTC skincare brand targeting women 28-45. Write Facebook ad copy that converts to purchase. Lead with the outcome, not the ingredient. Social proof outperforms urgency for this audience. Keep body copy under 125 words. Always end with a clear CTA."},
      {"role": "user", "content": "Write a Facebook ad for our Retinol Night Cream. Targeting: women 35-50, interest in anti-aging skincare. Goal: direct purchase conversion. Format: single image ad."},
      {"role": "assistant", "content": "**Headline:** \"Lines? What lines?\"\n\n**Body:** After 8 weeks, 94% of women in our clinical study said their skin looked visibly smoother — and they were done with expensive in-office treatments.\n\nOur Retinol Night Cream works while you sleep. No irritation protocol, no peeling phase, no downtime. Just wake up to skin you want to show off.\n\nOver 12,000 reviews. 4.9 stars.\n\n**CTA:** Shop Now — Free shipping on orders over $50\n\n*[Top performer — ROAS 4.2x, run for 6 weeks before fatigue]*"}
    ]}
    

    Include 400-800 ads in your training set. More data from a single brand = better calibration. If a client only has 100 historical ads, supplement with hypothetical winning variants you write based on the winning patterns you observe.

    Building a Performance Prediction Layer

    An optional extension: train the model to predict performance tier alongside generating copy.

    Enhanced output format:

    {
      "headline": "Lines? What lines?",
      "body": "After 8 weeks...",
      "cta": "Shop Now — Free shipping on orders over $50",
      "predicted_tier": "High",
      "confidence": 0.76,
      "winning_elements": ["social proof lead", "clinical data", "outcome-first headline", "objection removal"],
      "suggested_test": "Variant with urgency element ('Limited batch — ships Friday') for A/B against this"
    }
    

    This gives the performance team an instant pre-flight check before launching variants. The model has learned which elements appear in high-performing ads for this brand and can flag their presence or absence.

    Model Evaluation for Copywriting

    Standard accuracy metrics do not apply. Use these instead:

    Blind creative review: Have the performance team score generated copy 1-5 without knowing it was AI-generated. Target average: 3.8+ out of 5 (close to human-written scores from their same team).

    Historical performance simulation: Generate new variants for ad sets that already have performance data. Compare model predictions to actual historical performance. High correlation = model has learned the signal.

    Time-to-approval: Track how many generated copy variants are approved without changes vs. approved with edits vs. rejected. Target: 40%+ approved without significant edits within 3 months of deployment.

    Integration Into Agency Workflow

    Ideation phase: At the campaign brief stage, generate 15-20 copy variants using the brand model. Performance team selects the top 6-8 for creative production.

    A/B testing generation: When a winning variant needs testing against a challenger, the model generates 5 challengers calibrated to test specific elements (different angle, different CTA, different social proof framing).

    Refresh cycle: When ad fatigue hits a winning variant (CTR declining), run it through the model asking for "fatigued variant refresh — same core offer, different hook."

    Tooling: Wrap the Ollama endpoint in a simple internal tool your team uses. A Notion integration, a Chrome extension in Meta Ads Manager, or a basic web form connected to your API — all work. The key is reducing friction between "need copy" and "model generates it."


    Ship AI that runs on your users' devices.

    Ertas early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.

    Further Reading

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.

    Keep reading