<?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: Sebastian Cole</title>
    <description>The latest articles on DEV Community by Sebastian Cole (@sebastian_cole123).</description>
    <link>https://dev.to/sebastian_cole123</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%2F3940185%2F436f5079-6ee8-450a-b6c0-60c2d77c1aaa.png</url>
      <title>DEV Community: Sebastian Cole</title>
      <link>https://dev.to/sebastian_cole123</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sebastian_cole123"/>
    <language>en</language>
    <item>
      <title>Automating location-based SERP checks with Python</title>
      <dc:creator>Sebastian Cole</dc:creator>
      <pubDate>Thu, 04 Jun 2026 06:13:59 +0000</pubDate>
      <link>https://dev.to/sebastian_cole123/automating-location-based-serp-checks-with-python-l93</link>
      <guid>https://dev.to/sebastian_cole123/automating-location-based-serp-checks-with-python-l93</guid>
      <description>&lt;p&gt;I’ve been working on local SEO reporting for a client with multiple service areas, and manually checking rankings city by city was becoming painfully time-consuming.&lt;/p&gt;

&lt;p&gt;To speed things up, I started automating location-based SERP checks with Python so I could compare rankings across multiple cities in one run.&lt;/p&gt;

&lt;p&gt;Simplified example:&lt;/p&gt;

&lt;p&gt;import requests&lt;/p&gt;

&lt;p&gt;cities = ['London', 'Manchester', 'Birmingham']&lt;/p&gt;

&lt;p&gt;for city in cities:&lt;br&gt;
    params = {&lt;br&gt;
        'keyword': 'plumber',&lt;br&gt;
        'country': 'GB',&lt;br&gt;
        'city': city,&lt;br&gt;
        'language': 'en'&lt;br&gt;
    }&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;response = requests.get(
    'https://example-api.com/search',
    params=params
)

print(f'{city}: {response.json()}')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This made it much easier to:&lt;/p&gt;

&lt;p&gt;compare visibility between locations&lt;br&gt;
spot weak local markets&lt;br&gt;
monitor ranking inconsistencies&lt;br&gt;
prioritize local SEO improvements&lt;/p&gt;

&lt;p&gt;One interesting thing I found was that rankings varied much more between cities than expected. A site performing well in one area could be nearly invisible in another, even with similar competition levels.&lt;/p&gt;

&lt;p&gt;I’m curious how other developers or SEO folks are handling:&lt;/p&gt;

&lt;p&gt;geo-specific rank tracking&lt;br&gt;
local SERP simulation&lt;br&gt;
location-based reporting&lt;br&gt;
large-scale local SEO monitoring&lt;/p&gt;

&lt;p&gt;Are you building custom scripts for this, using APIs, or relying on traditional rank trackers?&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Working on a small Node</title>
      <dc:creator>Sebastian Cole</dc:creator>
      <pubDate>Tue, 26 May 2026 11:30:24 +0000</pubDate>
      <link>https://dev.to/sebastian_cole123/working-on-a-small-node-535p</link>
      <guid>https://dev.to/sebastian_cole123/working-on-a-small-node-535p</guid>
      <description>&lt;p&gt;I've been working on a small Node.js script to automate checking if my API endpoints are returning correct status codes. It's helped me catch issues before they affect users. Sharing the core logic:&lt;/p&gt;

&lt;p&gt;javascript&lt;br&gt;
const axios = require('axios');&lt;/p&gt;

&lt;p&gt;async function checkEndpoints(endpoints) {&lt;br&gt;
    const results = [];&lt;br&gt;
    for (const endpoint of endpoints) {&lt;br&gt;
        try {&lt;br&gt;
            const response = await axios.get(endpoint.url);&lt;br&gt;
            results.push({&lt;br&gt;
                url: endpoint.url,&lt;br&gt;
                status: response.status,&lt;br&gt;
                expected: endpoint.expected,&lt;br&gt;
                pass: response.status === endpoint.expected&lt;br&gt;
            });&lt;br&gt;
        } catch (error) {&lt;br&gt;
            results.push({&lt;br&gt;
                url: endpoint.url,&lt;br&gt;
                status: error.response?.status || 0,&lt;br&gt;
                expected: endpoint.expected,&lt;br&gt;
                pass: false&lt;br&gt;
            });&lt;br&gt;
        }&lt;br&gt;
    }&lt;br&gt;
    return results;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;// Example usage&lt;br&gt;
const endpoints = [&lt;br&gt;
    { url: '&lt;a href="https://api.example.com/users" rel="noopener noreferrer"&gt;https://api.example.com/users&lt;/a&gt;', expected: 200 },&lt;br&gt;
    { url: '&lt;a href="https://api.example.com/admin" rel="noopener noreferrer"&gt;https://api.example.com/admin&lt;/a&gt;', expected: 403 }&lt;br&gt;
];&lt;/p&gt;

&lt;p&gt;checkEndpoints(endpoints).then(console.log);&lt;/p&gt;

&lt;p&gt;For larger projects, I've used SERPSpur's monitoring API which does this automatically with alerts. But this script works for quick checks. How do you validate your endpoints?&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
