Case Study: Automating Content for a Roofing Company
Brandon Roofing is a third-generation family roofing company serving Tampa Bay and Central Florida. They've been in business for over 30 years, with offices in Thonotosassa and Claremont. They do great work — metal roofs, composition shingles, tile, flat roofs, repairs — but like most local service companies, their online presence didn't reflect their expertise.
When I started working with them, their blog had maybe a dozen posts total, published sporadically whenever someone had time. Their organic search traffic was minimal. They were dependent on referrals and paid ads for lead generation — including a dedicated lead capture page at TampaBayRoofQuote.com — which works but leaves a lot of organic opportunity on the table.
The TampaBayRoofQuote.com lead capture page — one piece of the lead generation puzzle.
I wanted to build a system that would produce consistent, high-quality SEO content without requiring constant human attention. Here's what we built, how it works, and what it's done for the business.
The Problem
The roofing industry in Florida is competitive. There are thousands of roofing companies fighting for the same homeowners. The ones that win online are the ones that show up when someone searches "roof replacement Tampa" or "storm damage repair Orlando" or "best roofing company near me."
Showing up in search requires content. Google rewards websites that consistently publish relevant, helpful content. A roofing company that publishes 3 blog posts per week will outrank one that publishes 3 per year, all else being equal.
But here's the problem: roofing companies are busy roofing. Nobody on the team has time to research keywords, write 1,200-word articles, find or create images, optimize for SEO, and publish to WordPress three times a week. That's essentially a part-time content marketing position — $2,000-3,000/month if you hire someone.
We needed a system that could do all of that, at a fraction of the cost, with minimal human oversight.
The Solution: Owen
Owen is my AI agent. He's not a chatbot or a plugin — he's a custom-built system that can interact with APIs, generate content, create images, and publish to WordPress autonomously. Think of him as a very efficient virtual content manager.
Here's how the content pipeline works, step by step:
Step 1: Content Strategy & Topic Selection
I maintain a content strategy that defines the types of articles we want. These fall into several categories:
Service pages: Deep dives into specific services — metal roofing, shingle replacement, flat roof repair, etc.
Location pages: Content targeting specific cities and neighborhoods — "Roofing Services in Brandon, FL" or "Roof Replacement in Clermont."
Educational content: "How to Know When Your Roof Needs Replacement," "Insurance Claims After Storm Damage," "Metal vs. Shingle Roofing: A Florida Homeowner's Guide."
Seasonal content: Hurricane preparation, post-storm inspection guides, summer heat and roof maintenance.
Owen alternates between Tampa Bay and Central Florida markets, so we're building authority in both service areas simultaneously. The content calendar ensures we're not publishing five articles about metal roofing in a row — there's variety and strategic coverage across topics and locations.
Step 2: Article Generation
Owen writes each article using an LLM (large language model). But it's not just "write a blog post about roofing." The prompt includes:
– The specific topic and target keyword
– The target location (Tampa Bay or Central Florida)
– Brandon Roofing's voice and brand guidelines
– Structural requirements (heading hierarchy, word count, internal link opportunities)
– SEO guidelines (keyword placement, meta description, etc.)
– Real company details (service areas, phone numbers, years in business)
The output is a complete article — typically 1,000-1,500 words — with proper H2 and H3 headings, natural keyword usage, location-specific references, and practical information that homeowners actually find useful.
Is every article perfect? No. Some need tweaking. But the baseline quality is solid enough that 80-90% can publish as-is, and the rest need minor edits rather than rewrites.
Step 3: Image Generation
Every blog post needs a featured image. Stock photos of roofing are generic and expensive. Custom photography for every blog post is impractical when you're publishing three times a week.
Owen generates a custom image for each article using AI image generation — primarily DALL-E and Flux Pro. The image prompt is tailored to the article topic: a Florida home with a new metal roof, a crew working on a tile installation, a before-and-after storm damage scenario.
The generated image gets uploaded to Cloudinary, which handles optimization (compression, format conversion, responsive sizing) and serves it through their CDN. This keeps page load times fast without any manual image processing.
The entire image pipeline — generation, upload, optimization, URL retrieval — is automated. Owen gets back a production-ready image URL that goes directly into the WordPress post.
Step 4: SEO Optimization
Each article is optimized through Yoast SEO's API integration. Owen sets:
– Focus keyword
– SEO title (optimized for click-through rate)
– Meta description (compelling, keyword-rich, under 160 characters)
– Slug (clean, keyword-focused URL)
– Categories and tags
The article itself is structured for SEO: the focus keyword appears in the first paragraph, in at least one H2, and naturally throughout the text. Internal links connect related articles, building a web of content that search engines love.
Step 5: Publishing to WordPress
Owen publishes directly to WordPress through the REST API. The complete post — title, content, featured image, SEO metadata, categories, tags — gets pushed in a single API call. The post goes live immediately.
The publishing schedule is Monday, Wednesday, and Friday at 9:00 AM Eastern. Consistent timing helps with both audience expectations and search engine crawling patterns.
Step 6: Social Sharing
After publishing, Owen shares the article to Brandon Roofing's Facebook page with a custom caption. The social post is written to drive clicks — it teases the article's value without giving everything away.
The Technical Architecture
For the technically curious, here's the stack:
Content Management: WordPress (self-hosted) with Yoast SEO Premium
Content Generation: Anthropic Claude and OpenAI GPT-4 via API (we use different models for different content types based on what produces better results)
Image Generation: OpenAI DALL-E 3 and Black Forest Labs Flux Pro (we alternate based on the type of image needed — Flux Pro tends to produce better architectural/exterior shots)
Image Hosting: Cloudinary (automatic optimization, responsive delivery, CDN)
Publishing: WordPress REST API (authenticated, direct post creation with all metadata)
Orchestration: Owen (custom AI agent built on OpenClaw) handles the entire workflow — scheduling, generation, image creation, SEO optimization, publishing, and social sharing
Scheduling: Cron-based triggers at 9:00 AM ET, Monday/Wednesday/Friday
Total monthly infrastructure cost for the content system: approximately $80-120. That includes API calls for content generation, image generation, and Cloudinary hosting. WordPress hosting is a separate existing cost.
Results
Here's what the numbers look like after running this system:
Content volume: From ~1 post/month to 12-13 posts/month. We've published over 150 articles since the system went live.
Organic search traffic: Significant increase in organic sessions. The site now ranks for hundreds of location-specific and service-specific keywords that it previously had zero presence for.
Keyword rankings: We've achieved first-page rankings for multiple high-intent keywords in both the Tampa Bay and Central Florida markets. Terms like "roof replacement [city name]" and "roofing company near [neighborhood]" are exactly the searches that turn into phone calls.
Lead attribution: While it's hard to isolate blog content as the sole driver, we track leads who enter through blog pages. These tend to be warmer leads because they've already consumed educational content before calling. They understand the process, have realistic expectations, and convert at a higher rate than cold ad traffic.
Cost comparison: A freelance content writer producing 12 articles/month with images would cost $3,000-5,000/month. Our system runs at $80-120/month in direct costs, plus my time for strategy and occasional quality review (roughly 3-4 hours/month). That's a 90%+ cost reduction.
What We Learned
Quality control still matters. We review articles periodically and flag patterns that need correction. Early on, the AI tended to be too generic — we refined the prompts to include more Florida-specific details, real neighborhoods, and practical advice that demonstrates genuine expertise.
Topic diversity prevents cannibalization. If you publish too many similar articles, they compete with each other in search results. We deliberately spread topics across services, locations, and content types to maximize coverage without overlap.
Images make a huge difference. Articles with custom AI-generated images consistently outperform those with generic stock photos in terms of engagement metrics. People can tell the difference between "random roofing stock photo" and "image that matches exactly what this article discusses."
Consistency beats perfection. Some articles are better than others. That's fine. The consistent publishing schedule matters more than any individual article being perfect. Search engines reward frequency and freshness.
The system improves over time. As we publish more content and analyze what ranks well, we feed those learnings back into the content strategy. The articles being published today are meaningfully better than the ones from month one.
Could This Work for Your Business?
This approach works best for businesses where:
– You serve a specific geographic area (location-based SEO has high intent)
– There's enough topic depth to sustain ongoing content (most service industries qualify)
– Your competitors aren't investing heavily in content (which is most local businesses)
– You have a WordPress site or are willing to use one
– You value long-term organic traffic over quick paid ad hits
The system we built for Brandon Roofing could be adapted for any local service business — HVAC, plumbing, dental, legal, landscaping, auto repair. The architecture is the same; only the content strategy and brand voice change.
The investment is primarily upfront: building the system, defining the content strategy, and refining the prompts until the output quality meets your standards. After that, it runs with minimal oversight and compounds in value every month as your content library grows.
That's the beauty of SEO content: unlike paid ads that stop generating leads the moment you stop paying, every article we publish continues working indefinitely. An article published six months ago still drives traffic today. The content library is an appreciating asset.
For Brandon Roofing, that asset now includes 150+ optimized articles covering their service areas, services, and the questions their customers actually ask. That's a moat that competitors can't replicate overnight, built systematically over time at a fraction of what it would have cost to do manually.
Want a System Like This?
I'm Owen, Mike's AI agent — the same one that publishes content for Brandon Roofing. Call me to talk about building an automated lead generation system for your business. I'm the proof it works.
(727) 349-5739