<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Maxime B</title>
    <description>The latest articles on DEV Community by Maxime B (@maximemb).</description>
    <link>https://dev.to/maximemb</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3268499%2F3d7a509b-75b2-4164-adcf-3eb9991c68ff.png</url>
      <title>DEV Community: Maxime B</title>
      <link>https://dev.to/maximemb</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maximemb"/>
    <language>en</language>
    <item>
      <title>Automating Press Coverage Tracking with Python</title>
      <dc:creator>Maxime B</dc:creator>
      <pubDate>Wed, 15 Oct 2025 03:12:00 +0000</pubDate>
      <link>https://dev.to/maximemb/automating-press-coverage-tracking-with-python-3m4o</link>
      <guid>https://dev.to/maximemb/automating-press-coverage-tracking-with-python-3m4o</guid>
      <description>&lt;p&gt;When a product gets mentioned online — in a blog post, news site, or startup directory — those backlinks can make a real difference for visibility and SEO.&lt;br&gt;
The problem: it’s hard to keep track of which mentions are actually live, and when new ones appear.&lt;/p&gt;

&lt;p&gt;Let’s automate that.&lt;/p&gt;

&lt;p&gt;What we’ll build&lt;/p&gt;

&lt;p&gt;A short Python script that:&lt;/p&gt;

&lt;p&gt;Reads a list of expected backlinks or mentions&lt;/p&gt;

&lt;p&gt;Checks which ones are live&lt;/p&gt;

&lt;p&gt;Notifies you if any new coverage appears for your domain&lt;/p&gt;

&lt;p&gt;You can run it daily with cron, GitHub Actions, or a simple cloud function.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a list of expected mentions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Create a file called backlinks.csv:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;url
https://startupdirectory.com/project/acme
https://techlaunch.io/acme-labs
https://founderstack.com/startups/acme
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each line should contain one URL where you expect your startup or product to be mentioned.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check if backlinks are live&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now let’s create a quick script to check if those pages still mention your brand.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import csv, requests

BRAND = "Acme Labs"
with open("backlinks.csv") as f:
    reader = csv.DictReader(f)
    for row in reader:
        try:
            r = requests.get(row["url"], timeout=10)
            if BRAND.lower() in r.text.lower():
                print(f"✅ Mention live: {row['url']}")
            else:
                print(f"⚠️ Page found but no mention: {row['url']}")
        except Exception as e:
            print(f"❌ Could not access {row['url']}: {e}")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run it with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python check_mentions.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ll get a simple report in the console showing which mentions are still active.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Optional: find new mentions automatically&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can also search Google for new results containing your brand name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import requests
from bs4 import BeautifulSoup

BRAND = "Acme Labs"
query = f"{BRAND} site:news site:startup site:tech"
url = f"https://www.google.com/search?q={query}"

headers = {"User-Agent": "Mozilla/5.0"}
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.text, "html.parser")

for g in soup.select("a"):
    href = g.get("href", "")
    if "http" in href and BRAND.lower() in href.lower():
        print(href)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use this to discover new coverage or mentions as they appear.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Bonus: build a lightweight PR tracker&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can combine the two scripts into one lightweight “PR health monitor” that runs daily.&lt;br&gt;
Store results in a CSV or Google Sheet, and you’ll never lose track of where your startup has been featured.&lt;/p&gt;

&lt;p&gt;If you’d rather skip the manual part and focus on getting new mentions instead of just checking them, tools like &lt;a href="https://mediaboost.cc" rel="noopener noreferrer"&gt;MediaBoost can help automate guaranteed press features and backlinks on trusted sites.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Takeaway:&lt;br&gt;
Even a few lines of code can turn PR tracking into a predictable, automatable system.&lt;br&gt;
Start with your own script, measure results, and only scale when it saves you time.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Ship a Daily SEO Blog With One POST Request</title>
      <dc:creator>Maxime B</dc:creator>
      <pubDate>Mon, 16 Jun 2025 11:28:00 +0000</pubDate>
      <link>https://dev.to/maximemb/ship-a-daily-seo-blog-with-one-post-request-6cj</link>
      <guid>https://dev.to/maximemb/ship-a-daily-seo-blog-with-one-post-request-6cj</guid>
      <description>&lt;p&gt;A year ago I was spending more time formatting blog posts than writing them.  &lt;/p&gt;

&lt;p&gt;My solution was to wrap the entire workflow—topic research, draft generation, on-page SEO, and scheduling—into one small API that publishes straight to a connected blog. The service became &lt;a href="https://blogbuster.so" rel="noopener noreferrer"&gt;Blogbuster&lt;/a&gt; and now drives thousands of organic clicks for side-projects that do not have a content team.&lt;/p&gt;

&lt;p&gt;In this quick tutorial you will:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a free Blogbuster workspace
&lt;/li&gt;
&lt;li&gt;Generate and schedule your first article with a single API call
&lt;/li&gt;
&lt;li&gt;Push the post live on a custom subdomain without a CMS&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;No prior experience with headless blogging or SEO tooling is required.&lt;br&gt;&lt;br&gt;
All you need is a free Blogbuster account and a cURL-friendly terminal.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Get an API key
&lt;/h2&gt;

&lt;p&gt;Sign up at &lt;strong&gt;blogbuster.so&lt;/strong&gt; and open &lt;strong&gt;Settings → API Keys&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Click &lt;strong&gt;Generate&lt;/strong&gt; and copy the token that appears.&lt;br&gt;&lt;br&gt;
For the rest of the guide we will call it &lt;code&gt;YOUR_API_KEY&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Every new account comes with two free articles so you can test end-to-end before upgrading.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. Point a subdomain to Blogbuster
&lt;/h2&gt;

&lt;p&gt;Inside your DNS provider create a CNAME record:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;blog&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;CNAME&lt;/td&gt;
&lt;td&gt;&lt;code&gt;cname.blogbuster.so&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Hit &lt;strong&gt;Publish&lt;/strong&gt; and give DNS a couple of minutes to propagate.&lt;br&gt;&lt;br&gt;
Blogbuster will provision SSL automatically once the record resolves.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Fire the “one-shot” endpoint
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;/generateAndSchedule&lt;/code&gt; endpoint accepts a JSON payload describing the article and when it should go live.&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
curl -X POST https://api.blogbuster.so/v1/generateAndSchedule \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "How to Build a Slack Bot in 30 Minutes",
    "targetAudience": "startup founders",
    "primaryKeyword": "build a slack bot",
    "publishAt": "2025-06-18T09:00:00Z",
    "blogSubdomain": "blog.yoursaas.com"
  }'
Behind the scenes Blogbuster:

Expands the prompt into an outline with semantically-related H2s and H3s

Drafts a 1200-word article that respects Google’s EEAT guidelines

Adds internal links if you already have content, otherwise it suggests sections for future posts

Generates an open-license header image

Schedules the post to publish at publishAt

Returns the public URL in the response

Expect a JSON block like:

json
Copy
Edit
{
  "status": "scheduled",
  "url": "https://blog.yoursaas.com/how-to-build-a-slack-bot"
}
Open that URL after the publish time to see a fully formatted article—no WordPress, plugins, or markdown converters required.

4. Automate a full content calendar
Because the endpoint is idempotent you can loop over a CSV of topics and fire one request per day.
Below is a minimal Python snippet:

python
Copy
Edit
import csv, requests, os, datetime, random

API_KEY = os.getenv("BB_KEY")
SUBDOMAIN = "blog.yoursaas.com"
BASE = "https://api.blogbuster.so/v1/generateAndSchedule"

with open("topics.csv") as f:
    reader = csv.DictReader(f)
    for row in reader:
        payload = {
            "title": row["title"],
            "targetAudience": "startup founders",
            "primaryKeyword": row["keyword"],
            "publishAt": (datetime.datetime.utcnow() + datetime.timedelta(
                days=random.randint(1, 30))).isoformat() + "Z",
            "blogSubdomain": SUBDOMAIN
        }
        r = requests.post(
            BASE,
            json=payload,
            headers={"Authorization": f"Bearer {API_KEY}"}
        )
        print(r.json()["url"])
Run the script once and you have thirty days of SEO-ready content queued up.

5. Monitor performance
Every article is annotated with structured data so Google Search Console will pick it up quickly.
Inside your Blogbuster dashboard you will see impressions, clicks, and ranking keywords per article.
Pair that with the Search Console API to pull metrics into your own BI stack or a simple Google Sheet.

Wrapping up
In under ten minutes you:

Claimed a subdomain that hosts itself

Generated an optimized article with one request

Scheduled a month of content in a short Python loop

If you try the workflow let me know how it fits your stack.
The full API reference lives in the Blogbuster docs and contributions to the open-source examples repo are always welcome.

Happy shipping and happy ranking!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>seo</category>
      <category>api</category>
    </item>
  </channel>
</rss>
