<?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: ByteHarvester</title>
    <description>The latest articles on DEV Community by ByteHarvester (@projectdev).</description>
    <link>https://dev.to/projectdev</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3882331%2F29d95d82-a74d-4a72-99b6-6e8e8e917279.png</url>
      <title>DEV Community: ByteHarvester</title>
      <link>https://dev.to/projectdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/projectdev"/>
    <language>en</language>
    <item>
      <title>A weekly AI visibility report for agency clients: setup, cost per client and a CSV you can hand over</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Fri, 30 Oct 2026 09:28:39 +0000</pubDate>
      <link>https://dev.to/projectdev/a-weekly-ai-visibility-report-for-agency-clients-setup-cost-per-client-and-a-csv-you-can-hand-over-1k1k</link>
      <guid>https://dev.to/projectdev/a-weekly-ai-visibility-report-for-agency-clients-setup-cost-per-client-and-a-csv-you-can-hand-over-1k1k</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I built the Apify Actor in this post. Written with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Clients now ask a new question: "are we showing up in ChatGPT?" An answer from a screenshot is not a report. A weekly, repeatable measurement per client is, and the cost per client is easy to work out in advance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;AI Brand Monitor on Apify&lt;/a&gt;&lt;/strong&gt; is priced per AI answer. Here is a setup you can copy. Full-size runs need a paid Apify plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup per client (about 5 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;Actor page&lt;/a&gt;&lt;/strong&gt; and fill in the client's &lt;strong&gt;Your brand domain&lt;/strong&gt;, &lt;strong&gt;Competitor domain(s)&lt;/strong&gt; (3 or 4) and &lt;strong&gt;Queries to track&lt;/strong&gt; (6 questions their buyers ask).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engines to query&lt;/strong&gt;: Perplexity, ChatGPT and Gemini. &lt;strong&gt;Samples per query&lt;/strong&gt;: 2. &lt;strong&gt;Query language&lt;/strong&gt;: the client's market.&lt;/li&gt;
&lt;li&gt;Run it once, then save the input as a &lt;strong&gt;task&lt;/strong&gt; named after the client.&lt;/li&gt;
&lt;li&gt;In Apify Console open &lt;strong&gt;Schedules&lt;/strong&gt;, click &lt;em&gt;Create schedule&lt;/em&gt;, use the cron &lt;code&gt;0 8 * * 1&lt;/code&gt; (every Monday at 08:00), and add the client's task.&lt;/li&gt;
&lt;li&gt;In the task, set &lt;em&gt;Max total charge&lt;/em&gt; as a hard ceiling.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Repeat for each client. The ready-made &lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker/examples/weekly-ai-brand-monitoring" rel="noopener noreferrer"&gt;weekly monitoring task&lt;/a&gt; is a good starting point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost per client
&lt;/h2&gt;

&lt;p&gt;A citation record is one engine x one question x one sample, and it costs $0.05 (less on higher Apify plans: Bronze $0.045, Silver $0.04, Gold and up $0.035).&lt;/p&gt;

&lt;p&gt;6 questions x 3 engines x 2 samples = 36 records = &lt;strong&gt;$1.80 per client per week&lt;/strong&gt;, about &lt;strong&gt;$7.80 a month&lt;/strong&gt;. On the Gold rate the same run is $1.26. Five clients at the base rate come to $9.00 a week. If you prefer one run for two clients, the ready-made agency task (2 brands, 15 questions each, 3 engines, 2 samples) is 180 records = $9.00, so $4.50 per brand.&lt;/p&gt;

&lt;h2&gt;
  
  
  What goes into the report
&lt;/h2&gt;

&lt;p&gt;Each record has what a client wants to see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;brandCited&lt;/code&gt; and &lt;code&gt;competitorsCited&lt;/code&gt;: is the client named, and who is named instead.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;citationShare&lt;/code&gt;: the client's share of citations against the competitors.&lt;/li&gt;
&lt;li&gt;the source URLs with titles and snippets: where to get listed or reviewed.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;answerText&lt;/code&gt;: the full AI answer, ready to drop into a client report.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From the second run on, the final &lt;code&gt;summary&lt;/code&gt; record carries a &lt;code&gt;sinceLastRun&lt;/code&gt; line such as "+2 answers now cite you, -1 no longer cites you". For the sources gained and lost, paste last week's dataset ID into &lt;code&gt;previousRunDatasetId&lt;/code&gt; and the Actor adds a &lt;code&gt;delta&lt;/code&gt; record.&lt;/p&gt;

&lt;p&gt;To hand it over, open the dataset and use &lt;strong&gt;Export&lt;/strong&gt; to get a CSV, then drop it into your own report template. A number makes the point, such as "your competitor is cited in 6 of 10 answers, you are in 1", and the source list is the plan to change it.&lt;/p&gt;

&lt;h2&gt;
  
  
  About the samples
&lt;/h2&gt;

&lt;p&gt;AI answers vary between requests, so a single sample can miss a citation that normally appears. Any value above 1 gives each source a stability score. Start with 2 as above, and move to 3 for the clients you report on most.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;Set up your first client report&lt;/a&gt;&lt;/strong&gt;: one run, up to $1.80, and a repeatable AI visibility baseline for the client this week.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>marketing</category>
      <category>agency</category>
    </item>
    <item>
      <title>Does Google AI Overview cite your page? Check 50 English keywords for $1.50, no API key</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Thu, 29 Oct 2026 09:28:14 +0000</pubDate>
      <link>https://dev.to/projectdev/does-google-ai-overview-cite-your-page-check-50-english-keywords-for-150-no-api-key-5eh8</link>
      <guid>https://dev.to/projectdev/does-google-ai-overview-cite-your-page-check-50-english-keywords-for-150-no-api-key-5eh8</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I built the Apify Actor in this post. Written with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When Google shows an AI Overview for a search, it lists the sources behind it. Is your site one of them, or is it a competitor, a Reddit thread or a review site? Checking by hand, keyword by keyword, is slow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-overview-citation-checker" rel="noopener noreferrer"&gt;Google AI Overview Citation Checker on Apify&lt;/a&gt;&lt;/strong&gt; does it for a whole keyword list. It reads the Google results page the way a visitor sees it, so you need no Google account, no API key and no browser of your own.&lt;/p&gt;

&lt;h2&gt;
  
  
  The check (5 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-overview-citation-checker" rel="noopener noreferrer"&gt;Actor page&lt;/a&gt;&lt;/strong&gt;. The form is prefilled with three everyday keywords and spotify.com.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keywords to check&lt;/strong&gt;: paste your searches exactly as a person would type them (up to 200 per run).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your domain(s)&lt;/strong&gt;: bare hostnames like &lt;code&gt;example.com&lt;/code&gt;. Subdomains of a domain you list count as yours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitor domain(s)&lt;/strong&gt;: optional, but add a few. The Actor looks for them in the same overview.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google country&lt;/strong&gt;: &lt;code&gt;us&lt;/code&gt; by default. AI Overviews differ by country, so set the market you sell in.&lt;/li&gt;
&lt;li&gt;Tick &lt;strong&gt;Free sample run&lt;/strong&gt; for your first look (first 3 keywords, no keyword fee), then untick it and run the full list.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Read the result in three piles
&lt;/h2&gt;

&lt;p&gt;Every keyword comes back as one row, ready for a spreadsheet:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;aiOverviewShown&lt;/code&gt;: did Google show an AI Overview for this search?&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;youCited&lt;/code&gt; and &lt;code&gt;yourCitedUrls&lt;/code&gt;: is one of your domains a cited source, and which pages?&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;yourBestPosition&lt;/code&gt;: where your best source sits in the overview's source list (1 is first).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;competitorsCited&lt;/code&gt;: each competitor found in the same overview, with its position and URL.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;allSourceDomains&lt;/code&gt;: every website the overview cites, in Google's order.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sort the list into three piles: &lt;strong&gt;no overview&lt;/strong&gt; (nothing to win on that keyword yet), &lt;strong&gt;overview without you&lt;/strong&gt; (your priority: study &lt;code&gt;allSourceDomains&lt;/code&gt; and the competitor pages cited), and &lt;strong&gt;overview with you&lt;/strong&gt; (keep an eye on &lt;code&gt;yourBestPosition&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;$0.03 per keyword checked.&lt;/strong&gt; Fifty keywords = &lt;strong&gt;$1.50&lt;/strong&gt;; the maximum of 200 is $6.00. You are charged only for keywords whose Google page was actually read; a keyword that fails (for example on a bot check) is marked &lt;code&gt;FAILED&lt;/code&gt; and is free. Set a maximum charge on the run and it stops cleanly when the budget is used up. Typical speed is about 10 to 20 seconds per keyword, three at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Good to know
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;It reads &lt;strong&gt;English-language Google&lt;/strong&gt;; the country setting changes the market, not the language.&lt;/li&gt;
&lt;li&gt;Google decides per query, per country and per moment whether to show an overview, and each keyword is one snapshot. Put the same list on an Apify schedule and compare the datasets to see the trend.&lt;/li&gt;
&lt;li&gt;"Position" means the order in the source list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want the same question for ChatGPT, Perplexity and Gemini? That is what the &lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;AI Brand Monitor&lt;/a&gt; is for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-overview-citation-checker" rel="noopener noreferrer"&gt;Check your keywords for Google AI Overview citations&lt;/a&gt;&lt;/strong&gt;. You can try it in one minute with the prefilled input.&lt;/p&gt;

</description>
      <category>google</category>
      <category>seo</category>
      <category>ai</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Compare Tesco, Sainsbury's, Asda and Morrisons prices in 20 lines of JavaScript (plus Coles, Woolworths and ALDI)</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Wed, 28 Oct 2026 18:18:49 +0000</pubDate>
      <link>https://dev.to/projectdev/compare-tesco-sainsburys-asda-and-morrisons-prices-in-20-lines-of-javascript-plus-coles-c1g</link>
      <guid>https://dev.to/projectdev/compare-tesco-sainsburys-asda-and-morrisons-prices-in-20-lines-of-javascript-plus-coles-c1g</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I built the APIs in this post. Written with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Grocery prices are the prices people check most often. They are also among the hardest to get as data. Every chain has its own website, its own search, its own way of showing a multi-buy offer, and its own habit of changing all of it without warning. If you have ever started a price-comparison side project, you know where the time goes: not into your app, but into keeping a scraper per supermarket alive.&lt;/p&gt;

&lt;p&gt;So I put &lt;strong&gt;10 supermarkets in 3 countries behind one API, with one JSON shape&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Country&lt;/th&gt;
&lt;th&gt;Stores&lt;/th&gt;
&lt;th&gt;Extras&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;UK (GBP)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Tesco, Sainsbury's, Asda, Morrisons&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sainsbury's: barcode, availability, Nectar prices with start and end dates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Australia (AUD)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Coles, Woolworths, ALDI, IGA, Harris Farm&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;barcode, ingredients and nutrition where the store publishes them; IGA and Harris Farm prices per store&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New Zealand (NZD)&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Woolworths NZ&lt;/strong&gt; (formerly Countdown)&lt;/td&gt;
&lt;td&gt;barcode, club price, stock level&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every product comes back with name, price, was-price, offer text, unit price, pack size, category, image and link. Add &lt;code&gt;onlySpecials=true&lt;/code&gt; and you get only the products on offer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://rapidapi.com/highbrowfame/api/uk-supermarket-prices-tesco-sainsburys-asda-morrisons" rel="noopener noreferrer"&gt;Try the UK Supermarket Prices API on RapidAPI&lt;/a&gt;&lt;/strong&gt;: the free Basic plan gives you 50 requests a month, enough to build and test everything below.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. One request
&lt;/h2&gt;

&lt;p&gt;Subscribe to the free plan, copy your RapidAPI key, then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="s2"&gt;"https://uk-supermarket-prices-tesco-sainsburys-asda-morrisons.p.rapidapi.com/grocery-uk/search?store=sainsburys&amp;amp;query=baked%20beans&amp;amp;limit=5"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-rapidapi-host: uk-supermarket-prices-tesco-sainsburys-asda-morrisons.p.rapidapi.com"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-rapidapi-key: YOUR_RAPIDAPI_KEY"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A real answer from 28 October 2026, shortened:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"site"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sainsburys"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"results"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Heinz Baked Beans in a Rich Tomato Sauce 4 x 415g"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"wasPrice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;3.9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"isOnSpecial"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"isClubPrice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"promoEndDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-11-03T00:00:00Z"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"unitPriceText"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"£1.81/kg"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"barcode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"5000157024886"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"currency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"GBP"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.sainsburys.co.uk/gol-ui/product/heinz-baked-beans-in-a-rich-tomato-sauce-4-x-415g"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Price, the old price, the Nectar flag, the date the offer ends, the unit price and the barcode, already parsed. No HTML, no selectors, no headless browser on your side.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Twenty lines: the cheapest shop for one product
&lt;/h2&gt;

&lt;p&gt;Save this as &lt;code&gt;compare.mjs&lt;/code&gt; and run it with Node 18 or newer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;HOST&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;uk-supermarket-prices-tesco-sainsburys-asda-morrisons.p.rapidapi.com&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RAPIDAPI_KEY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;STORES&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;tesco&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;sainsburys&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;asda&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;morrisons&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`https://&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;HOST&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/grocery-uk/search?store=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;query=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nf"&gt;encodeURIComponent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;limit=5`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-rapidapi-host&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;HOST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-rapidapi-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;KEY&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;OK&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;unit&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;unitPriceText&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;offer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;isOnSpecial&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;yes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt; &lt;span class="p"&gt;}));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;heinz baked beans&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rows&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;STORES&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)))).&lt;/span&gt;&lt;span class="nf"&gt;flat&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;RAPIDAPI_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_key node compare.mjs &lt;span class="s2"&gt;"heinz baked beans 4 x 415g"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get one table with every match from all four chains, cheapest first. This is what it printed on 28 October 2026 (first rows, about 8 seconds for all four chains):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;store       name                                                price  unit      offer
asda        Heinz Beanz Baked Beans 415g                        1.38
tesco       Heinz Beanz Baked Beans 415g                        1.40
morrisons   Heinz Tinned Baked Beans 415g                       1.40   £3.37/kg  yes
sainsburys  Heinz Baked Beans in a Rich Tomato Sauce 4 x 415g   3.00   £1.81/kg  yes
morrisons   Heinz Baked Beans 4x415g                            3.00   £2.35/kg  yes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same tin, four shops, one call each. One comparison is four requests, so the free plan covers about a dozen comparisons a month while you build. Tip: naming the brand and the pack size (&lt;code&gt;"heinz baked beans 4 x 415g"&lt;/code&gt;) gives the tightest matches, because supermarkets list dozens of near-identical products.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. A deal alert in one parameter
&lt;/h2&gt;

&lt;p&gt;Add &lt;code&gt;&amp;amp;onlySpecials=true&lt;/code&gt; and only discounted products come back. Run that on a schedule (cron, a GitHub Action, a serverless function), keep the products you have not seen yet, and post them to Discord, Slack or e-mail. That is a working "price drop" bot for the products your users care about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Australia and New Zealand: the same code
&lt;/h2&gt;

&lt;p&gt;Change the host and the path, and the same loop works for Coles, Woolworths, ALDI, IGA and Harris Farm (&lt;code&gt;/grocery-au/search?store=coles|woolworths|aldi|iga|harris-farm&lt;/code&gt;) or Woolworths New Zealand (&lt;code&gt;/grocery-nz/search?store=woolworths-nz&lt;/code&gt;). The fields have the same names, so your table, your alerts and your database schema stay the same. ALDI and Harris Farm answers come from their full catalogs, refreshed daily, so they come back instantly, and each answer says when its prices were read. IGA and Harris Farm set prices per store: add &lt;code&gt;postcode=2000&lt;/code&gt; or &lt;code&gt;storeId=&amp;lt;store number&amp;gt;&lt;/code&gt; for IGA and &lt;code&gt;location=Broadway&lt;/code&gt; for Harris Farm (33 stores), and the answer names the store it used.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://rapidapi.com/highbrowfame/api/australian-supermarket-prices-api-coles-woolworths-aldi" rel="noopener noreferrer"&gt;Australian Supermarket Prices API (Coles, Woolworths, ALDI, IGA, Harris Farm)&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://rapidapi.com/highbrowfame/api/new-zealand-supermarket-prices-api-woolworths-countdown" rel="noopener noreferrer"&gt;New Zealand Supermarket Prices API (Woolworths NZ)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What people build with it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Price comparison&lt;/strong&gt; pages and apps: "where is my basket cheapest this week?"&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Basket trackers and inflation dashboards&lt;/strong&gt;: the same 30 products every day, a chart per chain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deal and price-drop alerts&lt;/strong&gt; for a list of favourite products.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recipe and meal-plan costing&lt;/strong&gt;: the real price of a recipe at each chain.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI shopping assistants&lt;/strong&gt;: give your agent a tool that returns real, current shelf prices instead of guesses.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Good to know
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Prices are the stores' online prices.&lt;/li&gt;
&lt;li&gt;Tesco and Asda prices come from each chain's own Google Shopping listings (resellers are removed), so they have no barcode or stock flag. Sainsbury's, Morrisons, Coles, Woolworths and ALDI come with the richer fields listed above.&lt;/li&gt;
&lt;li&gt;A search that finds nothing tells you so in a &lt;code&gt;problems&lt;/code&gt; list, so your code can tell "no product" apart from "no answer".&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Plans
&lt;/h2&gt;

&lt;p&gt;The same plans on all three APIs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Basic&lt;/strong&gt;: free, 50 requests a month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro&lt;/strong&gt;: $9.99 a month for 1,000 requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ultra&lt;/strong&gt;: $29.99 a month for 3,000 requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mega&lt;/strong&gt;: $99.99 a month for 10,000 requests&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Start before the Christmas rush
&lt;/h2&gt;

&lt;p&gt;Shoppers compare grocery prices hardest in the weeks before Christmas, and a price chart is only as good as the history behind it. If you want your tracker, dashboard or alert bot to show real trends in December, start collecting this week. The free plan is enough to wire everything up today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://rapidapi.com/highbrowfame/api/uk-supermarket-prices-tesco-sainsburys-asda-morrisons" rel="noopener noreferrer"&gt;Get your free key for the UK Supermarket Prices API&lt;/a&gt;&lt;/strong&gt;: Tesco, Sainsbury's, Asda and Morrisons in one call, in about five minutes from now.&lt;/p&gt;

</description>
      <category>api</category>
      <category>javascript</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Which pages do AI engines cite for your category? Turn the sources into an outreach to-do list</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Wed, 28 Oct 2026 09:27:58 +0000</pubDate>
      <link>https://dev.to/projectdev/which-pages-do-ai-engines-cite-for-your-category-turn-the-sources-into-an-outreach-to-do-list-1k1o</link>
      <guid>https://dev.to/projectdev/which-pages-do-ai-engines-cite-for-your-category-turn-the-sources-into-an-outreach-to-do-list-1k1o</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I built the Apify Actor in this post. Written with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Knowing whether an AI engine mentions you is the thermometer. The useful part is the list underneath: &lt;strong&gt;the exact pages the engine read to build its answer.&lt;/strong&gt; Ask "best CRM for small business" and the sources might be a review site, a Capterra listing, a Reddit thread and two vendor blogs. You cannot edit the model, but you can get onto those pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;AI Brand Monitor on Apify&lt;/a&gt;&lt;/strong&gt; returns, for every answer, the full source list with URL, page title and the quoted snippet. Here is how to turn it into a to-do list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: collect the sources (5 minutes)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;Actor page&lt;/a&gt;&lt;/strong&gt;. The form is prefilled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Queries to track&lt;/strong&gt;: enter 4 category questions your buyers type, such as "best [category] for small business" or "[category] alternatives".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engines to query&lt;/strong&gt;: Perplexity only (remove the prefilled ChatGPT; Perplexity needs no API key).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Samples per query&lt;/strong&gt;: 3. The same question is asked three times, and each source gets a stability score.&lt;/li&gt;
&lt;li&gt;Add your domain and 3 competitor domains, then click &lt;strong&gt;Start&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cost: 4 queries x 1 engine x 3 samples = 12 records x $0.05 = &lt;strong&gt;$0.60&lt;/strong&gt;. That also fits the 12 Perplexity calls per run included on a free Apify plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: keep only the sources that hold
&lt;/h2&gt;

&lt;p&gt;AI answers are not deterministic. A domain cited once in five runs is noise; a domain cited every time is the engine's settled answer. When you set more than one sample, the Actor writes a &lt;code&gt;stability&lt;/code&gt; record per query and engine, with each domain's &lt;code&gt;occurrences&lt;/code&gt;, &lt;code&gt;samples&lt;/code&gt; and &lt;code&gt;stability&lt;/code&gt; (1.0 means cited every time). The recommended filter: ignore anything below 0.5.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: build the to-do list
&lt;/h2&gt;

&lt;p&gt;Open the run's dataset and use &lt;strong&gt;Export&lt;/strong&gt; to download a CSV, or read the &lt;code&gt;citations&lt;/code&gt; field of each record. Make one spreadsheet row per stable domain, with the page URL, the title and how many of your queries cite it. Then sort by count and assign an action to each row:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Review site or marketplace&lt;/strong&gt;: get listed, or collect reviews there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reddit or forum thread&lt;/strong&gt;: join the conversation with a useful answer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vendor or comparison blog&lt;/strong&gt;: pitch your inclusion, or publish your own comparison.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A competitor's own page&lt;/strong&gt;: study what it covers that yours does not.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check the &lt;code&gt;competitorsCited&lt;/code&gt; field on each record too. It shows which rivals are cited on the same question, so you know who you are being compared with.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: check whether it worked
&lt;/h2&gt;

&lt;p&gt;Save the input as a task and run it again in a few weeks. Pass the earlier run's dataset ID as &lt;code&gt;previousRunDatasetId&lt;/code&gt; and the Actor writes a &lt;code&gt;delta&lt;/code&gt; record with the sources you gained and lost per query.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this beats guessing
&lt;/h2&gt;

&lt;p&gt;The source list is the best available lever for getting cited. Your first list is a starting map, and the repeat run shows which moves counted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;Get your category's source list&lt;/a&gt;&lt;/strong&gt;: one run, about 60 cents, and a list of pages to get onto.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>marketing</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>We asked Claude 400 software-buying questions. Here is who it recommends, and what it reads</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Tue, 27 Oct 2026 12:26:00 +0000</pubDate>
      <link>https://dev.to/projectdev/we-asked-claude-400-software-buying-questions-here-is-who-it-recommends-and-what-it-reads-539h</link>
      <guid>https://dev.to/projectdev/we-asked-claude-400-software-buying-questions-here-is-who-it-recommends-and-what-it-reads-539h</guid>
      <description>&lt;p&gt;Your next customer may never see your homepage. More and more buyers ask an AI assistant "what's the best CRM for a small team?" and go with the three names in the answer. If you are not one of those three names, you are not on the shortlist.&lt;/p&gt;

&lt;p&gt;So we checked what Claude actually says. On 27 October 2026 we asked Claude (Claude Haiku 5.5 with live web search) &lt;strong&gt;400 buyer questions across 8 software categories&lt;/strong&gt; and recorded every answer and every source it cited, with our &lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;AI Search Visibility Tracker&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we asked
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;8 categories:&lt;/strong&gt; CRM, SEO tools, project management, email marketing, website builders, accounting software, password managers, VPNs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;50 questions per category:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;38 category questions&lt;/strong&gt; that name no brand: "best CRM for small business", "cheapest VPN", "best accounting software for Canada", "best SEO tool with an API".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;12 brand questions:&lt;/strong&gt; "HubSpot alternatives", "Xero vs QuickBooks", "is Semrush worth it".&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The percentages below come from the 38 category questions only&lt;/strong&gt;, so a brand never gets credit just because the question named it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One answer per question, all on the same day.&lt;/strong&gt; On average Claude read and cited &lt;strong&gt;9.2 sources per answer&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who Claude names
&lt;/h2&gt;

&lt;p&gt;Share of the 38 category answers that name the brand, and how often the brand is the &lt;strong&gt;first one Claude names&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Named most often&lt;/th&gt;
&lt;th&gt;Named first most often&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CRM&lt;/td&gt;
&lt;td&gt;HubSpot 92%, Zoho CRM 92%, Pipedrive 76%, Salesforce 66%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;HubSpot&lt;/strong&gt;, 25 of 38&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SEO tools&lt;/td&gt;
&lt;td&gt;Ahrefs 84%, Google Search Console 84%, Semrush 79%, Screaming Frog 63%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Semrush&lt;/strong&gt;, 20 of 38&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Project management&lt;/td&gt;
&lt;td&gt;Asana 92%, ClickUp 82%, monday.com 74%, Trello 55%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;ClickUp&lt;/strong&gt;, 10 of 38&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Email marketing&lt;/td&gt;
&lt;td&gt;Brevo 87%, MailerLite 76%, Klaviyo 61%, ActiveCampaign 61%, Mailchimp 61%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Brevo&lt;/strong&gt;, 15 of 38&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Website builders&lt;/td&gt;
&lt;td&gt;Wix 95%, Squarespace 71%, WordPress 66%, Hostinger 58%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Wix&lt;/strong&gt;, 19 of 38&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Accounting&lt;/td&gt;
&lt;td&gt;QuickBooks 92%, Xero 89%, Zoho Books 82%, Wave 74%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;QuickBooks&lt;/strong&gt;, 20 of 38&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Password managers&lt;/td&gt;
&lt;td&gt;Bitwarden 95%, 1Password 89%, NordPass 68%, Proton Pass 63%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Bitwarden&lt;/strong&gt;, 18 of 38&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VPNs&lt;/td&gt;
&lt;td&gt;Proton VPN 95%, NordVPN 92%, Surfshark 71%, ExpressVPN 58%&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;NordVPN&lt;/strong&gt;, 29 of 38&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three things jump out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. In 5 of 8 categories, one brand is named first in at least half the answers.&lt;/strong&gt; NordVPN opens 29 of 38 VPN answers, HubSpot 25 of 38 CRM answers. The first name is the one a busy buyer remembers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Being famous is not enough.&lt;/strong&gt; Mailchimp is in 61% of email-marketing answers but named first only 5 times; Brevo is named first 15 times. LastPass appears in only 11% of password-manager answers. Zoho CRM is mentioned exactly as often as HubSpot. Claude follows the pages it reads &lt;em&gt;today&lt;/em&gt;, not brand fame alone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Project management has no clear winner.&lt;/strong&gt; ClickUp, monday.com, Asana and Trello split the first spot (10, 8, 7 and 5 times). That's a category where a challenger can still take the top line.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Claude reads
&lt;/h2&gt;

&lt;p&gt;This is where it gets useful. In every category Claude cited &lt;strong&gt;100 to 220 different websites&lt;/strong&gt;. The most-cited ones are "best X for Y" roundups, and many of them are written by a software vendor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Project management:&lt;/strong&gt; ones.com (a project-management vendor's blog) was cited in &lt;strong&gt;68%&lt;/strong&gt; of answers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email marketing:&lt;/strong&gt; sequenzy.com was cited in &lt;strong&gt;68%&lt;/strong&gt; of answers, brevo.com in &lt;strong&gt;53%&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CRM:&lt;/strong&gt; nethunt.com, a CRM vendor's blog, tied for the most-cited source at &lt;strong&gt;26%&lt;/strong&gt;, next to Zapier, TechRadar and Forbes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPNs and password managers:&lt;/strong&gt; classic review sites lead (TechRadar 63% of VPN answers, security.org 53% of password-manager answers).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These vendors publish one honest comparison page for every buyer situation: "best CRM for agencies", "best CRM for Mac", "best email marketing tools for freelancers". Claude finds the page that matches the question and quotes it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Being cited and being recommended are two different things.&lt;/strong&gt; NetHunt is named in 21% of CRM answers, next to the giants, and its own guides are among the pages Claude reads most. ONES and Sequenzy are cited in two-thirds of their categories' answers, yet named as a product far less often. A page can feed the answer without putting your name in it. You only know which one you get if you measure it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your own brand in 2 minutes
&lt;/h2&gt;

&lt;p&gt;Everything above came from four runs of the &lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;AI Search Visibility Tracker&lt;/a&gt;, two categories per run. You can run the same check on your brand:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Put in your domain, 3–5 competitors and the questions your buyers ask.&lt;/li&gt;
&lt;li&gt;Tick &lt;strong&gt;Claude&lt;/strong&gt;, plus ChatGPT, Perplexity, Gemini and Google AI Overviews if you want the full picture. No API keys needed.&lt;/li&gt;
&lt;li&gt;You get your &lt;strong&gt;AI Visibility Score (0–100)&lt;/strong&gt;, which competitors each engine names instead of you, and &lt;strong&gt;the exact pages it cites&lt;/strong&gt;, so you know which roundup to get into or which comparison page to write.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It costs &lt;strong&gt;$0.05 per AI answer&lt;/strong&gt;, and you pay only for answers delivered. A 20-question check on one engine is about $1.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;Run it on your brand now&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI answers change every week: a new roundup gets published, and the names in the answer shift. &lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker/examples/weekly-ai-brand-monitoring" rel="noopener noreferrer"&gt;Start from the ready weekly monitoring task&lt;/a&gt;&lt;/strong&gt;, and every run tells you which answers started or stopped naming you, and which new competitors showed up.&lt;/p&gt;

&lt;p&gt;Your competitors' names are already in these answers. &lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;See whether yours is.&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Method notes: one answer per question, collected on 27 October 2026 with Claude Haiku 5.5 and web search; a brand counts as "named" when its name appears in the answer text; "named first" is the earliest of the tracked brands in the answer. Answers vary from day to day, so treat single percentages as a snapshot, not a ranking.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was written with AI assistance.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>marketing</category>
      <category>saas</category>
    </item>
    <item>
      <title>AI share of voice: how often ChatGPT, Perplexity and Gemini name you vs 3 competitors ($0.80)</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Tue, 27 Oct 2026 09:28:03 +0000</pubDate>
      <link>https://dev.to/projectdev/ai-share-of-voice-how-often-chatgpt-perplexity-and-gemini-name-you-vs-3-competitors-080-1lmm</link>
      <guid>https://dev.to/projectdev/ai-share-of-voice-how-often-chatgpt-perplexity-and-gemini-name-you-vs-3-competitors-080-1lmm</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I built the Apify Actor in this post. Written with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In classic SEO you track rankings. In AI search the question is different: when a buyer asks an assistant "what are the best project management tools?", &lt;strong&gt;which brands does it name, in what order, and how often is yours one of them?&lt;/strong&gt; That is your AI share of voice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-brand-share-of-voice" rel="noopener noreferrer"&gt;AI Brand Share of Voice on Apify&lt;/a&gt;&lt;/strong&gt; runs that experiment for a whole category and returns a scoreboard. You type a category; it writes the buyer questions, asks Perplexity and Gemini (and ChatGPT), reads the brand names out of every answer, merges name variants, and ranks every brand. No brand list and no API key needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your brand vs 3 competitors in 5 minutes
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-brand-share-of-voice" rel="noopener noreferrer"&gt;Actor page&lt;/a&gt;&lt;/strong&gt;. The form is prefilled with "project management software" and Asana, Trello and Monday.com.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Category&lt;/strong&gt;: type yours as a noun phrase, for example "CRM software" or "running shoes".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brands to always include&lt;/strong&gt;: your brand plus three competitors. A brand nobody mentions stays in the table at 0%, which is often the finding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Market (country)&lt;/strong&gt;: leave &lt;code&gt;us&lt;/code&gt; or set &lt;code&gt;gb&lt;/code&gt;, &lt;code&gt;de&lt;/code&gt;, &lt;code&gt;au&lt;/code&gt; and so on. &lt;strong&gt;Number of prompts&lt;/strong&gt;: set 10. &lt;strong&gt;Samples per prompt and engine&lt;/strong&gt;: keep the default of 2.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI engines&lt;/strong&gt;: keep all three (Perplexity, Gemini, ChatGPT). Click &lt;strong&gt;Start&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Want to see real output first? Tick &lt;strong&gt;Free sample run&lt;/strong&gt;: 3 prompts, 1 sample, Perplexity only, no prompt fee.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to read the table
&lt;/h2&gt;

&lt;p&gt;You get one row per brand, best first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mentionRate&lt;/code&gt;: the share of all analysed answers that mention the brand (0 to 1).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;avgPosition&lt;/code&gt;: the average place in the answers that name it (1 means named first).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;engineSplit&lt;/code&gt;: mention rate per engine, so you can see if you win on Gemini but vanish on Perplexity.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;citationShare&lt;/code&gt;: the share of cited source URLs that sit on the brand's own website.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A final &lt;code&gt;summary&lt;/code&gt; row gives the top brand and the five most-cited domains. The key-value store record &lt;code&gt;OUTPUT&lt;/code&gt; holds the full report, and &lt;code&gt;TOP_SOURCES&lt;/code&gt; the sources table alone. That table lists independent publishers and review sites next to the brands' own sites, so you can see where a mention can be earned.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs
&lt;/h2&gt;

&lt;p&gt;The price is &lt;strong&gt;$0.08 per prompt benchmarked&lt;/strong&gt;. Samples and engines do not change it. Ten prompts = &lt;strong&gt;$0.80&lt;/strong&gt;. The default run of 8 prompts is $0.64; a thorough 30-prompt run is $2.40. A prompt that no engine answers is not charged.&lt;/p&gt;

&lt;p&gt;One setting to know: on the included key, ChatGPT answers 1 sample on the first 15 prompts of a run (3 prompts on a free Apify plan). Add your own OpenAI key and it runs on every prompt and sample.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make it a habit
&lt;/h2&gt;

&lt;p&gt;With 8 prompts and 2 samples you get a reliable first picture of who dominates the category. For a steadier ranking, raise the prompts to 20 to 30. Then put it on an Apify schedule, monthly for example, and compare the brand rows from run to run to see whether your &lt;code&gt;mentionRate&lt;/code&gt; is rising.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-brand-share-of-voice" rel="noopener noreferrer"&gt;Benchmark your category for $0.80&lt;/a&gt;&lt;/strong&gt;, and send the scoreboard to whoever asked "are we showing up in AI?"&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>marketing</category>
      <category>analytics</category>
    </item>
    <item>
      <title>EU customs identifiers from 1 November: 6 days left, a checklist for your Shopify catalog</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Mon, 26 Oct 2026 09:59:54 +0000</pubDate>
      <link>https://dev.to/projectdev/eu-customs-identifiers-from-1-november-6-days-left-a-checklist-for-your-shopify-catalog-3p2p</link>
      <guid>https://dev.to/projectdev/eu-customs-identifiers-from-1-november-6-days-left-a-checklist-for-your-shopify-catalog-3p2p</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I build Citebeam, the Shopify app mentioned in this post. Written with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;From 1 November 2026, EU customs declarations for online sales of imported goods to consumers have to carry product identifiers for each item, and customs can hold parcels that lack required data. On 26 October that is 6 days away.&lt;/p&gt;

&lt;p&gt;Whether your parcels are in scope, and the exact format, is for your carrier or customs broker to confirm. This is a readiness check, not legal advice.&lt;/p&gt;

&lt;h2&gt;
  
  
  What good looks like
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Unique SKUs.&lt;/strong&gt; Every variant has its own real SKU, your own product code (M-PID).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Valid barcodes.&lt;/strong&gt; A GTIN, EAN, UPC or ISBN (S-PID) wherever the product has one: digits only, with a correct check digit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No placeholders.&lt;/strong&gt; No N/A, none, 0 or - in the SKU or barcode field. A mistyped barcode is worse than none.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The manual way, free
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Export your products as a CSV.&lt;/li&gt;
&lt;li&gt;In the Variant SKU column, filter the blanks, then flag duplicates (Google Sheets, SKUs in column A: &lt;code&gt;=COUNTIF(A:A, A2)&amp;gt;1&lt;/code&gt;). Replace placeholders with real codes.&lt;/li&gt;
&lt;li&gt;Check the barcodes. To test the check digit, drop the last digit, multiply the rest from the right alternately by 3 and 1, and add them up. The check digit brings the total to the next multiple of 10: 123456789012 totals 92, so the barcode is 1234567890128. A product with no barcode should declare "Has no standardized identifier" on the variant, not a typed placeholder.&lt;/li&gt;
&lt;li&gt;Set the vendor to the brand or maker. For the manufacturer's code (NS-PID), ask your supplier for the model or part number and enter it as a barcode of type NS-PID. Never invent one. If it is empty, Shopify has said it fills one in from another barcode, the SKU or the variant ID; a real supplier code is better.&lt;/li&gt;
&lt;li&gt;HS code and country of origin live on the variant, in the Shipping section. Your carrier or customs broker may ask for them. Origin is where the item was made, not where you ship from.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That works and is free, but it is a lot of cells to read.&lt;/p&gt;

&lt;h2&gt;
  
  
  The quicker way: Citebeam's EU customs IDs page
&lt;/h2&gt;

&lt;p&gt;Citebeam: AI Visibility, my app, has an &lt;strong&gt;EU customs IDs&lt;/strong&gt; page in its menu. Press &lt;strong&gt;Check my catalog&lt;/strong&gt;. It reads your active products live, read-only, and changes nothing in your store.&lt;/p&gt;

&lt;p&gt;You see the share of variants with a real, unique SKU, a valid barcode and, where Shopify returns it, a manufacturer code, then a &lt;strong&gt;What to fix&lt;/strong&gt; table (for example no SKU, duplicate SKU, barcode that fails the check digit), each row marked Fix, Review or Good to have.&lt;/p&gt;

&lt;p&gt;Then &lt;strong&gt;Download carrier handover CSV&lt;/strong&gt;: one line per variant with handle, variant title, SKU, barcode, vendor, manufacturer code and, where Shopify returns them, HS code and country of origin. Only valid barcodes go in the barcode column, and a last column of notes says what to fix (delete it before you send the file). The file is built in your browser, and nothing from the check is stored on our servers.&lt;/p&gt;

&lt;p&gt;Plainly: apps cannot read Shopify's "Has no standardized identifier" setting yet, so variants that declared it still show up under "No barcode". Free ($0) checks the first 250 products, Starter ($19) 2,000, Growth ($49) 5,000; paid plans have a 7-day trial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://apps.shopify.com/ai-visibility-vs-competitors" rel="noopener noreferrer"&gt;Install Citebeam from the Shopify App Store&lt;/a&gt;&lt;/strong&gt; and run the check today.&lt;/p&gt;

&lt;h2&gt;
  
  
  Six days: where to start
&lt;/h2&gt;

&lt;p&gt;SKUs first, then barcodes, then maker codes and HS codes. Short on time? Citebeam finds the gaps and hands you the file: &lt;strong&gt;&lt;a href="https://apps.shopify.com/ai-visibility-vs-competitors" rel="noopener noreferrer"&gt;open the Citebeam listing&lt;/a&gt;&lt;/strong&gt; and start on the Free plan.&lt;/p&gt;

&lt;p&gt;This is a readiness check, not legal advice: confirm with your carrier or customs broker.&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>ecommerce</category>
      <category>customs</category>
      <category>europe</category>
    </item>
    <item>
      <title>How to check if ChatGPT recommends your brand (a 5-minute audit for about 50 cents)</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Mon, 26 Oct 2026 09:27:49 +0000</pubDate>
      <link>https://dev.to/projectdev/how-to-check-if-chatgpt-recommends-your-brand-a-5-minute-audit-for-about-50-cents-1lfb</link>
      <guid>https://dev.to/projectdev/how-to-check-if-chatgpt-recommends-your-brand-a-5-minute-audit-for-about-50-cents-1lfb</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I built the Apify Actor in this post. Written with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A buyer types "best CRM for small business" into ChatGPT or Perplexity and gets three or four brand names plus the pages behind them. Is yours one of them, or is it your competitor? Most teams have never checked, because asking the chatbot by hand once tells you almost nothing.&lt;/p&gt;

&lt;p&gt;Here is a first audit you can run in about five minutes with &lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;AI Brand Monitor on Apify&lt;/a&gt;&lt;/strong&gt;. No code, no API key.&lt;/p&gt;

&lt;h2&gt;
  
  
  The audit
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;AI Brand Monitor page&lt;/a&gt;&lt;/strong&gt;. The form is prefilled with an example (hubspot.com and five CRM questions).&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Your brand domain&lt;/strong&gt;, replace the example with your own domain, such as &lt;code&gt;example.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Queries to track&lt;/strong&gt;, replace the five prefilled questions with five that your buyers really ask. Good patterns: "best [category] for [audience]", "[your brand] alternatives", "[your brand] vs [competitor]", "is [your brand] worth it".&lt;/li&gt;
&lt;li&gt;In &lt;strong&gt;Competitor domain(s)&lt;/strong&gt;, add three or four rivals.&lt;/li&gt;
&lt;li&gt;Leave &lt;strong&gt;Engines to query&lt;/strong&gt; as prefilled (Perplexity and ChatGPT) and &lt;strong&gt;Samples per query&lt;/strong&gt; at 1. Click &lt;strong&gt;Start&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Not ready to pay anything yet? Tick &lt;strong&gt;Free sample run&lt;/strong&gt; first: it runs your first 3 queries at 3 samples each on the included engine with a result fee of $0.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get back
&lt;/h2&gt;

&lt;p&gt;One dataset row per AI answer. The fields to read first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;brandCited&lt;/code&gt;: did the engine cite your domain or mention your brand in the answer text?&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;competitorsCited&lt;/code&gt;: which of your competitors showed up instead.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;citationShare&lt;/code&gt;: your share of the citations against your competitors.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;answerText&lt;/code&gt;: the full answer, so you can read exactly how you were (or were not) described.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If &lt;code&gt;brandCited&lt;/code&gt; is false on most rows and a rival is named on all of them, you have your answer, and a clear gap to close.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs
&lt;/h2&gt;

&lt;p&gt;You pay per AI answer, called a citation record: $0.05 on the free Apify plan, less on paid plans (down to $0.035). The audit above is 5 questions x 2 engines x 1 sample = 10 records = &lt;strong&gt;$0.50&lt;/strong&gt;. On a free plan ChatGPT is measured on the first 3 questions per run and skipped questions are never billed, so that run comes to 8 records = $0.40. If you want a hard ceiling, set &lt;em&gt;Max total charge&lt;/em&gt; before you press Start.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make the result trustworthy
&lt;/h2&gt;

&lt;p&gt;AI answers vary from request to request, so one sample is a snapshot. Raise &lt;strong&gt;Samples per query&lt;/strong&gt; to 3 and the Actor also reports a stability score for each source: how consistently it was cited across the repeats. The Actor's docs recommend ignoring sources below 0.5.&lt;/p&gt;

&lt;p&gt;One more detail worth knowing: the Actor asks ChatGPT through OpenAI's API with web search, then records the answer and its sources. It is a measurement you can repeat and compare, not a screenshot of your own chat history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next step
&lt;/h2&gt;

&lt;p&gt;Run the five questions that matter most to your sales today. Whatever the audit shows, you will know which brands the AI engines put in front of your buyers, and you will have the source pages they used.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;Run your first AI visibility audit&lt;/a&gt;&lt;/strong&gt;, then save the input as a task so you can re-run it next week and see what moved.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>marketing</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>Get a Discord ping the moment a new OfferUp listing appears near you (no code, pennies a day)</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Sun, 25 Oct 2026 21:30:47 +0000</pubDate>
      <link>https://dev.to/projectdev/get-a-discord-ping-the-moment-a-new-offerup-listing-appears-near-you-no-code-pennies-a-day-58k2</link>
      <guid>https://dev.to/projectdev/get-a-discord-ping-the-moment-a-new-offerup-listing-appears-near-you-no-code-pennies-a-day-58k2</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I built the Apify Actor in this post. Written with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you flip phones, bikes, tools or furniture, you already know the rule: the good OfferUp deals are gone within the hour. Refreshing the app all day is not a strategy. What you want is a ping on your phone &lt;strong&gt;only when something new shows up&lt;/strong&gt; for your search, in your area.&lt;/p&gt;

&lt;p&gt;Here is a setup that does exactly that with &lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/offerup-listings" rel="noopener noreferrer"&gt;OfferUp Scraper on Apify&lt;/a&gt;&lt;/strong&gt;. Five minutes, no code.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Build your search
&lt;/h2&gt;

&lt;p&gt;Open the Actor and fill in the form:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keywords&lt;/strong&gt;: what you hunt for, one per line (&lt;code&gt;iphone 15&lt;/code&gt;, &lt;code&gt;road bike&lt;/code&gt;, &lt;code&gt;dewalt&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Locations&lt;/strong&gt;: a US city or ZIP, several if you want (&lt;code&gt;Seattle, WA&lt;/code&gt;, &lt;code&gt;98101&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distance&lt;/strong&gt;, &lt;strong&gt;Min/Max price&lt;/strong&gt;, &lt;strong&gt;Condition&lt;/strong&gt; and &lt;strong&gt;Sort&lt;/strong&gt; (&lt;code&gt;newest&lt;/code&gt;) to cut the noise.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Or paste an OfferUp search link you already use. Each listing comes back with title, price, condition, category, town and state, post date, whether the price is firm, the photo and, for cars, make, model, year, trim and mileage.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Switch on "Only new listings"
&lt;/h2&gt;

&lt;p&gt;Tick &lt;strong&gt;Only new listings (feed mode)&lt;/strong&gt;. The first run returns everything that matches. Every later run of the same search returns &lt;strong&gt;only listings no earlier run delivered&lt;/strong&gt;, each with a &lt;code&gt;firstSeenAt&lt;/code&gt; time. Listings you have already seen are skipped and &lt;strong&gt;not charged&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Send it to Discord
&lt;/h2&gt;

&lt;p&gt;In Discord: &lt;em&gt;Server Settings → Integrations → Webhooks → New Webhook → Copy Webhook URL&lt;/em&gt;. Paste that URL into &lt;strong&gt;Alert webhook URL&lt;/strong&gt;. Whenever new listings turn up, the Actor posts the count and the first five listings to your channel. Slack webhooks work the same way, and the task's &lt;em&gt;Integrations&lt;/em&gt; tab can also send e-mail or fill a Google Sheet.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Put it on a timer
&lt;/h2&gt;

&lt;p&gt;Save the input as a task, then &lt;em&gt;Schedules → Create new schedule&lt;/em&gt;. Use &lt;code&gt;0 * * * *&lt;/code&gt; for every hour, or &lt;code&gt;0 7 * * *&lt;/code&gt; for a daily morning digest. Done: your phone buzzes when a new deal appears, and stays quiet when nothing changed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs
&lt;/h2&gt;

&lt;p&gt;You pay per listing delivered: &lt;strong&gt;$1.50 per 1,000 listings&lt;/strong&gt; on the free Apify plan, less on higher plans, with listing details included at no extra charge. In feed mode only new listings are charged. If 15 new listings turn up per day, that is about &lt;strong&gt;$0.02 a day&lt;/strong&gt;. A day with nothing new costs nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this beats refreshing the app
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;You watch several keywords and several towns in one run.&lt;/li&gt;
&lt;li&gt;You never see the same listing twice.&lt;/li&gt;
&lt;li&gt;The data lands as a spreadsheet too, so you can sort by price and spot the items priced below the rest, or check what a model really sells for before you buy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/offerup-listings" rel="noopener noreferrer"&gt;Set up your OfferUp deal alert&lt;/a&gt;&lt;/strong&gt;. The form is prefilled, and the first run takes about a minute.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>discord</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Get a daily alert when ChatGPT stops recommending your brand (no code, about $0.25 a day)</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Sun, 25 Oct 2026 17:06:09 +0000</pubDate>
      <link>https://dev.to/projectdev/get-a-daily-alert-when-chatgpt-stops-recommending-your-brand-no-code-about-025-a-day-1okg</link>
      <guid>https://dev.to/projectdev/get-a-daily-alert-when-chatgpt-stops-recommending-your-brand-no-code-about-025-a-day-1okg</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I built the Apify Actor in this post. Written with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ask ChatGPT or Perplexity "what is the best CRM for a small business?" and it names three or four products and cites a handful of pages. If your brand was in that answer last week and is gone today, you lose buyers before they ever reach Google. Most teams find out weeks later, if at all.&lt;/p&gt;

&lt;p&gt;AI answers also move from day to day, so a single check is only a snapshot. What you want is a &lt;strong&gt;daily check that tells you only what changed&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup (5 minutes, no code)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;AI Brand Monitor on Apify&lt;/a&gt;&lt;/strong&gt;. The form is prefilled: put in your domain, 3 to 5 questions your buyers really ask, and your competitors' domains.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Start&lt;/strong&gt;. You get one row per AI answer: is your brand cited, which competitors are cited instead, and the exact source URLs the engine used.&lt;/li&gt;
&lt;li&gt;Save the input as a task, then &lt;strong&gt;Schedules → Create schedule → &lt;code&gt;0 8 * * *&lt;/code&gt;&lt;/strong&gt; (every day at 08:00).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;From the second run on, every run compares itself with the previous run of the same brand, engines and questions, automatically. The run's status line and the final &lt;code&gt;summary&lt;/code&gt; record say things like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Since your last run on 2026-10-24: +2 answers now cite you, -1 no longer cites you, new competitor cited: example.org.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Connect the task to Slack or e-mail in the &lt;strong&gt;Integrations&lt;/strong&gt; tab and that sentence lands in your channel every morning.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs
&lt;/h2&gt;

&lt;p&gt;You pay per AI answer checked: $0.05 on the free Apify plan, less on paid plans. A small daily watch of 5 questions on one engine is 5 records = &lt;strong&gt;$0.25 a day&lt;/strong&gt;. The comparison itself costs nothing extra, and you can set a hard spending ceiling on the task (&lt;em&gt;Max total charge&lt;/em&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do with a "lost" alert
&lt;/h2&gt;

&lt;p&gt;Look at the sources the engine cited instead of you. They are usually a review site, a comparison article, a Reddit thread or a competitor's guide. Those pages are your to-do list: get listed, get reviewed, answer the thread, publish the comparison the AI is quoting. The next daily run shows whether it worked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;Start your daily AI visibility check&lt;/a&gt;&lt;/strong&gt;. The first run takes about a minute.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>marketing</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>73% of the Shopify stores I checked still load scripts that stop on 1 March 2027</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Sat, 24 Oct 2026 11:29:08 +0000</pubDate>
      <link>https://dev.to/projectdev/73-of-the-shopify-stores-i-checked-still-load-scripts-that-stop-on-1-march-2027-e3e</link>
      <guid>https://dev.to/projectdev/73-of-the-shopify-stores-i-checked-still-load-scripts-that-stop-on-1-march-2027-e3e</guid>
      <description>&lt;p&gt;Disclosure: I build Citebeam, and the free checker linked below is mine.&lt;/p&gt;

&lt;p&gt;Shopify will stop injecting ScriptTags into storefronts on &lt;strong&gt;1 March 2027&lt;/strong&gt;. I wanted to know how many real stores still depend on them, so I measured it: of 45 public Shopify storefronts I checked, &lt;strong&gt;33 (73%) still load at least one ScriptTag&lt;/strong&gt;. I built a free checker for this at &lt;a href="https://citebeam-three.vercel.app/script-tags?utm_source=devto&amp;amp;utm_campaign=scripttags" rel="noopener noreferrer"&gt;Citebeam&lt;/a&gt;, an independent Shopify app (not affiliated with Shopify). You paste a store address and it shows what will stop and what to ask your vendors. This post is the data behind it, and the two-minute manual version if you would rather not use any tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is changing
&lt;/h2&gt;

&lt;p&gt;From the Shopify developer changelog (published 24 August 2026):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Since &lt;strong&gt;1 October 2026&lt;/strong&gt;, apps can no longer create or update ScriptTags. &lt;code&gt;scriptTagCreate&lt;/code&gt; and &lt;code&gt;scriptTagUpdate&lt;/code&gt; return an error, and the REST resource rejects &lt;code&gt;POST&lt;/code&gt; and &lt;code&gt;PUT&lt;/code&gt;. This applies to all API versions, so pinning an old version does not defer it.&lt;/li&gt;
&lt;li&gt;Existing ScriptTags keep running until &lt;strong&gt;1 March 2027&lt;/strong&gt;, when Shopify stops injecting them into storefronts.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;scriptTags&lt;/code&gt; query and &lt;code&gt;scriptTagDelete&lt;/code&gt; still work, so apps can audit and clean up.&lt;/li&gt;
&lt;li&gt;The replacements are &lt;strong&gt;app embed blocks&lt;/strong&gt; in a theme app extension (for general JavaScript) and &lt;strong&gt;web pixels&lt;/strong&gt; (for analytics and conversion tracking only).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This covers ScriptTags scoped to the online store. Scripts on the order status page fall under a separate, earlier deprecation.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I measured it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;45 stores: one theme demo store plus 44 drawn at random from a list of live stores (30 on custom domains, 14 on &lt;code&gt;*.myshopify.com&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;For each store I fetched only what any visitor can fetch: &lt;code&gt;robots.txt&lt;/code&gt;, the public home page, and &lt;code&gt;/account/login&lt;/code&gt; (only where robots.txt allows it). Honest user agent, robots.txt respected, no retries, no proxy.&lt;/li&gt;
&lt;li&gt;Shopify injects ScriptTags into the page head as an &lt;code&gt;asyncLoad&lt;/code&gt; function with a &lt;code&gt;var urls = [ ... ]&lt;/code&gt; list. That list parsed as JSON on all 33 pages that have it. I counted the URLs in it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Limits, so you can weigh the numbers: I looked at the &lt;strong&gt;home page only&lt;/strong&gt;, so scripts that load on other page types are not counted. The sample is &lt;strong&gt;small, and it leans toward smaller stores&lt;/strong&gt;. The list shows what a store injects, not which app owns it, so I can only name the host a script is served from. I could not compare against any store's admin.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I found
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;33 of 45 stores (73%)&lt;/strong&gt; inject at least one ScriptTag. 12 (27%) have none.&lt;/li&gt;
&lt;li&gt;95 ScriptTag URLs in total. Among the stores that have any: median 2, mean 2.9, &lt;strong&gt;max 11&lt;/strong&gt; in a single store.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;29 of 45 stores (64%)&lt;/strong&gt; also load at least one theme app embed asset, so many stores are mid-way: some apps already moved, some did not. 26 stores have both.&lt;/li&gt;
&lt;li&gt;Most common hosts the scripts are served from, by number of stores: &lt;code&gt;nfcube.com&lt;/code&gt; 8, &lt;code&gt;chimpstatic.com&lt;/code&gt; 6, &lt;code&gt;hextom.com&lt;/code&gt; 5, and &lt;code&gt;trustpilot.com&lt;/code&gt;, &lt;code&gt;avada.io&lt;/code&gt; and &lt;code&gt;printful.com&lt;/code&gt; 3 each. Another 25 or so domains appear once: chat, reviews, pop-ups, back-in-stock, email capture, upsell, affiliate and analytics apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A script served from a vendor's domain does not mean that vendor has not migrated. Many vendors already offer an app embed, and the old ScriptTag may just be a leftover. For any domain you see, &lt;strong&gt;check with the vendor&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually breaks
&lt;/h2&gt;

&lt;p&gt;A ScriptTag is how many older apps put something on your storefront without editing the theme: a pop-up, a chat bubble, review stars, a back-in-stock form, an upsell. When injection stops, whatever that script drew or did stops loading, unless the app has moved to an app embed. And even after a vendor ships an app embed, it is off until someone switches it on in the theme editor. A vendor saying "we migrated" and your storefront showing the widget are two separate facts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check your own store in two minutes (no tool needed)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open your home page in a private window, view the page source (Ctrl+U or Cmd+Option+U).&lt;/li&gt;
&lt;li&gt;Search for &lt;code&gt;asyncLoad&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Right below it you will see &lt;code&gt;var urls = [ ... ]&lt;/code&gt;. Every URL in that list is a ScriptTag. If the block is not there, you have none on the home page.&lt;/li&gt;
&lt;li&gt;Look at the domains and match them to apps you installed. Theme app embeds look different (&lt;code&gt;cdn.shopify.com/extensions/...&lt;/code&gt;) and do not appear in that list.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Or let the free checker do the reading: &lt;a href="https://citebeam-three.vercel.app/script-tags?utm_source=devto&amp;amp;utm_campaign=scripttags" rel="noopener noreferrer"&gt;paste your store address, no sign-up&lt;/a&gt;. It makes two requests to your public storefront, lists the ScriptTags with the vendor host behind each, shows any theme app extensions, and checks the legacy account question below. It is free, and it only reads pages any visitor can open.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do about it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ask each vendor&lt;/strong&gt; which of its features use a ScriptTag today and what its plan is for 1 March 2027. You want to hear "app embed" or "theme app extension" and a date.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch on the app embed&lt;/strong&gt; in the theme editor once the vendor ships it, and test the page.&lt;/li&gt;
&lt;li&gt;Analytics and conversion scripts should move to a &lt;strong&gt;web pixel&lt;/strong&gt;, which needs no action from the merchant.&lt;/li&gt;
&lt;li&gt;If a vendor has no plan, you have until 1 March 2027 to replace the app, which is a lot easier in November than on 28 February.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  One more deadline: legacy customer accounts
&lt;/h2&gt;

&lt;p&gt;Shopify deprecated legacy customer accounts on 26 February 2026. The final sunset date is to be announced later in 2026. In my sample, &lt;strong&gt;8 of the 43 stores I could read (19%)&lt;/strong&gt; still showed the classic login form, the signal that a store is still on legacy accounts (the other 35 redirect to the new sign-in; 2 stores' robots.txt does not allow &lt;code&gt;/account/login&lt;/code&gt;, so I did not fetch it). The checker reports this too.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you look after more than one store
&lt;/h2&gt;

&lt;p&gt;Agencies and freelancers can run the same check across a whole client list with the Apify actor &lt;a href="https://apify.com/highbrow_fame/shopify-script-tag-checker" rel="noopener noreferrer"&gt;Shopify Script Tag Checker&lt;/a&gt;. Give it a list of store domains (or a CSV link) and you get one row per store: a risk level, the ScriptTags and the vendor hosts behind them, the number of app embeds, whether the store is still on legacy customer accounts, and plain-English next steps. It checks a store for $0.01, so a 50-store client list is 50 cents, and stores it cannot check are free. It is going public on the Apify Store now.&lt;/p&gt;

&lt;p&gt;You can see a public example run here: &lt;a href="https://apify.com/highbrow_fame/shopify-script-tag-checker/examples/will-20-shopify-stores-break-1-march-2027" rel="noopener noreferrer"&gt;Will 20 Shopify stores break on 1 March 2027?&lt;/a&gt;. And here is a &lt;a href="https://youtu.be/3VxW1hmAaPc" rel="noopener noreferrer"&gt;short YouTube walkthrough&lt;/a&gt; of the checker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your next step
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Check one store now: &lt;a href="https://citebeam-three.vercel.app/script-tags?utm_source=devto&amp;amp;utm_campaign=scripttags" rel="noopener noreferrer"&gt;free ScriptTag checker&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Run it on every client store: &lt;a href="https://apify.com/highbrow_fame/shopify-script-tag-checker" rel="noopener noreferrer"&gt;Apify actor&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Forward this to the person who installed the apps, and put "ask vendors about 1 March 2027" on this week's list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The deadline is fixed and the vendor answers take time. A short list of questions sent today beats a broken storefront in March.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Written with AI assistance.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>ecommerce</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Where are the tech jobs in Germany? Jobs by city, remote share and salaries (22 October 2026)</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Sat, 24 Oct 2026 06:51:56 +0000</pubDate>
      <link>https://dev.to/projectdev/where-are-the-tech-jobs-in-germany-jobs-by-city-remote-share-and-salaries-22-october-2026-563p</link>
      <guid>https://dev.to/projectdev/where-are-the-tech-jobs-in-germany-jobs-by-city-remote-share-and-salaries-22-october-2026-563p</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Disclosure: I built the Apify Actors used to collect this data. This post was written with AI assistance.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;München leads the German tech job market this week with 275 open software developer jobs on XING, ahead of Berlin (239).&lt;/strong&gt; Across the ten biggest job cities, 421 of 1,452 software developer jobs were posted or refreshed in the last seven days. Of the newly posted or refreshed tech jobs in my sample, 9.9% are fully remote and 53.2% hybrid; only 35.3% show a salary published by the employer, and 54.3% carry only an estimate computed by XING.&lt;/p&gt;

&lt;p&gt;If you are hunting for a developer, data or DevOps job in Germany, or benchmarking your own hiring, "which city, how much, how remote" is spread across thousands of ads. This report counts them from two job boards with the same searches every time, so changes between editions are real changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Software developer jobs by city
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F21126o22vjrt1g8qqlkm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F21126o22vjrt1g8qqlkm.png" alt="Open software developer jobs by city on XING" width="799" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;City&lt;/th&gt;
&lt;th&gt;Software developer jobs open&lt;/th&gt;
&lt;th&gt;Posted or refreshed in last 7 days&lt;/th&gt;
&lt;th&gt;Data engineer jobs open&lt;/th&gt;
&lt;th&gt;DevOps jobs open&lt;/th&gt;
&lt;th&gt;Hybrid or remote share (new jobs)&lt;/th&gt;
&lt;th&gt;Salary published by employer&lt;/th&gt;
&lt;th&gt;Change in open software jobs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;München&lt;/td&gt;
&lt;td&gt;275&lt;/td&gt;
&lt;td&gt;82&lt;/td&gt;
&lt;td&gt;113&lt;/td&gt;
&lt;td&gt;151&lt;/td&gt;
&lt;td&gt;51.6%&lt;/td&gt;
&lt;td&gt;43%&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Berlin&lt;/td&gt;
&lt;td&gt;239&lt;/td&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;td&gt;150&lt;/td&gt;
&lt;td&gt;205&lt;/td&gt;
&lt;td&gt;63.8%&lt;/td&gt;
&lt;td&gt;21.3%&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hamburg&lt;/td&gt;
&lt;td&gt;187&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td&gt;80&lt;/td&gt;
&lt;td&gt;145&lt;/td&gt;
&lt;td&gt;65.2%&lt;/td&gt;
&lt;td&gt;37.1%&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Köln&lt;/td&gt;
&lt;td&gt;147&lt;/td&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;td&gt;76&lt;/td&gt;
&lt;td&gt;102&lt;/td&gt;
&lt;td&gt;59.7%&lt;/td&gt;
&lt;td&gt;39.1%&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frankfurt am Main&lt;/td&gt;
&lt;td&gt;137&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td&gt;70&lt;/td&gt;
&lt;td&gt;130&lt;/td&gt;
&lt;td&gt;77.5%&lt;/td&gt;
&lt;td&gt;40.4%&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stuttgart&lt;/td&gt;
&lt;td&gt;114&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;td&gt;73&lt;/td&gt;
&lt;td&gt;73%&lt;/td&gt;
&lt;td&gt;43.2%&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nürnberg&lt;/td&gt;
&lt;td&gt;114&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;59&lt;/td&gt;
&lt;td&gt;69.3%&lt;/td&gt;
&lt;td&gt;37.3%&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dresden&lt;/td&gt;
&lt;td&gt;109&lt;/td&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;60&lt;/td&gt;
&lt;td&gt;46.8%&lt;/td&gt;
&lt;td&gt;17.2%&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Düsseldorf&lt;/td&gt;
&lt;td&gt;69&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;66&lt;/td&gt;
&lt;td&gt;59.5%&lt;/td&gt;
&lt;td&gt;39.3%&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leipzig&lt;/td&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;61.6%&lt;/td&gt;
&lt;td&gt;30.8%&lt;/td&gt;
&lt;td&gt;–&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Each role column counts the jobs XING returns for that keyword in that city, so a job can appear in more than one role. Shares come from a sample of up to 20 new jobs per search; cities with fewer than 10 sampled jobs show n/a. The last column compares with the previous edition (this is the first edition, shown as a dash).&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  By role
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role (search keyword)&lt;/th&gt;
&lt;th&gt;Open jobs in the 10 cities&lt;/th&gt;
&lt;th&gt;Posted or refreshed in last 7 days&lt;/th&gt;
&lt;th&gt;Fully remote / hybrid (new jobs)&lt;/th&gt;
&lt;th&gt;Salary published&lt;/th&gt;
&lt;th&gt;Median published salary (per year)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Data &amp;amp; AI ("data engineer")&lt;/td&gt;
&lt;td&gt;602&lt;/td&gt;
&lt;td&gt;203&lt;/td&gt;
&lt;td&gt;2.9% / 53.6%&lt;/td&gt;
&lt;td&gt;17.1%&lt;/td&gt;
&lt;td&gt;€77,500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DevOps &amp;amp; cloud ("devops")&lt;/td&gt;
&lt;td&gt;1,037&lt;/td&gt;
&lt;td&gt;382&lt;/td&gt;
&lt;td&gt;17% / 58.5%&lt;/td&gt;
&lt;td&gt;55.3%&lt;/td&gt;
&lt;td&gt;€80,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IT security ("it-sicherheit")&lt;/td&gt;
&lt;td&gt;1,038&lt;/td&gt;
&lt;td&gt;343&lt;/td&gt;
&lt;td&gt;11.6% / 57.8%&lt;/td&gt;
&lt;td&gt;39.5%&lt;/td&gt;
&lt;td&gt;€90,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IT admin &amp;amp; support ("it-administrator")&lt;/td&gt;
&lt;td&gt;1,482&lt;/td&gt;
&lt;td&gt;438&lt;/td&gt;
&lt;td&gt;7.6% / 59.4%&lt;/td&gt;
&lt;td&gt;40.6%&lt;/td&gt;
&lt;td&gt;€62,500&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software development ("softwareentwickler")&lt;/td&gt;
&lt;td&gt;1,452&lt;/td&gt;
&lt;td&gt;421&lt;/td&gt;
&lt;td&gt;9.7% / 38.9%&lt;/td&gt;
&lt;td&gt;23.8%&lt;/td&gt;
&lt;td&gt;€70,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2rvfeo20gajtjx7xpo7h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2rvfeo20gajtjx7xpo7h.png" alt="Remote, hybrid and on-site share by role" width="799" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On XING, "published" means the employer stated a salary in the ad; for most ads XING shows its own estimate instead, which I count separately and do not treat as a salary disclosure. The median uses published salaries with a yearly range between €20,000 and €300,000.&lt;/p&gt;

&lt;h2&gt;
  
  
  The second source: stellenanzeigen.de, the complete list
&lt;/h2&gt;

&lt;p&gt;stellenanzeigen.de is a smaller board with fewer tech ads, which means I can read all of them. This week it listed &lt;strong&gt;580 distinct tech jobs&lt;/strong&gt; across 27 tech keywords, 177 of them posted in the last seven days. Home office is possible or full in &lt;strong&gt;56.7%&lt;/strong&gt; of them (1.2% fully remote), and &lt;strong&gt;13.6%&lt;/strong&gt; state a salary, with a median advertised yearly salary of €67,500 (61 ads with a yearly range).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Jobs&lt;/th&gt;
&lt;th&gt;Posted in last 7 days&lt;/th&gt;
&lt;th&gt;Home office possible or full&lt;/th&gt;
&lt;th&gt;Salary stated&lt;/th&gt;
&lt;th&gt;Median salary (per year)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Data &amp;amp; AI&lt;/td&gt;
&lt;td&gt;144&lt;/td&gt;
&lt;td&gt;34&lt;/td&gt;
&lt;td&gt;48.6%&lt;/td&gt;
&lt;td&gt;9%&lt;/td&gt;
&lt;td&gt;€80,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DevOps &amp;amp; cloud&lt;/td&gt;
&lt;td&gt;50&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;22%&lt;/td&gt;
&lt;td&gt;6%&lt;/td&gt;
&lt;td&gt;€75,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IT security&lt;/td&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;65.5%&lt;/td&gt;
&lt;td&gt;16.4%&lt;/td&gt;
&lt;td&gt;€70,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SAP &amp;amp; ERP&lt;/td&gt;
&lt;td&gt;82&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;92.7%&lt;/td&gt;
&lt;td&gt;8.5%&lt;/td&gt;
&lt;td&gt;€80,000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IT admin &amp;amp; support&lt;/td&gt;
&lt;td&gt;117&lt;/td&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;47.9%&lt;/td&gt;
&lt;td&gt;18.8%&lt;/td&gt;
&lt;td&gt;€56,770&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Software development&lt;/td&gt;
&lt;td&gt;132&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td&gt;60.6%&lt;/td&gt;
&lt;td&gt;18.9%&lt;/td&gt;
&lt;td&gt;€65,000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Most common workplaces on stellenanzeigen.de (a job with several workplaces counts for each city):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;City&lt;/th&gt;
&lt;th&gt;Jobs&lt;/th&gt;
&lt;th&gt;Share of tech jobs&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hamburg&lt;/td&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;td&gt;6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Frankfurt am Main&lt;/td&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;4.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dortmund&lt;/td&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;4.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Berlin&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;3.8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Köln&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;3.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;München&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;3.3%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Düsseldorf&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;2.4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Finsterwalde&lt;/td&gt;
&lt;td&gt;13&lt;/td&gt;
&lt;td&gt;2.2%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stuttgart&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;2.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Karlsruhe&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;2.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  How this was measured
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sources:&lt;/strong&gt; the &lt;a href="https://apify.com/highbrow_fame/xing-jobs" rel="noopener noreferrer"&gt;XING Jobs Scraper&lt;/a&gt; and the &lt;a href="https://apify.com/highbrow_fame/stellenanzeigen-jobs" rel="noopener noreferrer"&gt;stellenanzeigen.de Scraper&lt;/a&gt; on Apify, run on 2026-10-22 with fixed inputs: 5 role keywords ("data engineer", "devops", "it-sicherheit", "it-administrator", "softwareentwickler") in ten cities (Berlin, München, Hamburg, Frankfurt am Main, Köln, Stuttgart, Düsseldorf, Leipzig, Dresden, Nürnberg) on XING; 27 tech keywords across all of Germany on stellenanzeigen.de.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Counts:&lt;/strong&gt; the open-job and new-job numbers on XING are the totals XING reports for each search at run time. The stellenanzeigen.de figures are counted from the complete list.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Samples:&lt;/strong&gt; work mode and salary shares for XING come from up to 20 jobs per search posted or refreshed in the last 7 days (XING's own date filter) (801 distinct jobs in total), so read them as estimates of the new-job mix, not of every open ad.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What the keywords catch:&lt;/strong&gt; a keyword search matches ads that mention the term, so some matches are only loosely related. The same searches run every week, which keeps editions comparable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aggregates only:&lt;/strong&gt; no job titles, ad texts, company names or contact details are used or published here.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to get this data yourself, every day
&lt;/h2&gt;

&lt;p&gt;Everything above was collected by these Apify Actors from a fixed input, plus some arithmetic. You can run the same collection on your own Apify account in a couple of clicks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://apify.com/highbrow_fame/xing-jobs" rel="noopener noreferrer"&gt;XING Jobs Scraper&lt;/a&gt;: $0.80 per 1,000 results on the free plan, you pay only for results delivered.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://apify.com/highbrow_fame/stellenanzeigen-jobs" rel="noopener noreferrer"&gt;stellenanzeigen.de Scraper&lt;/a&gt;: $1.20 per 1,000 results on the free plan, you pay only for results delivered.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Collecting the data for this edition costs about $1.92 on Apify's free plan&lt;/strong&gt; (you pay per result delivered, nothing for a search that returns nothing), so a weekly refresh is about $8 a month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Daily monitor in three steps:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the Actor, paste an input like the one below, and switch on &lt;strong&gt;Only new&lt;/strong&gt; (&lt;code&gt;onlyNew&lt;/code&gt;). The first run returns everything; every later run returns only what no earlier run of the same watch list delivered, and skipped items are not charged.&lt;/li&gt;
&lt;li&gt;Save the input as a task and put it on a schedule (for example the cron expression &lt;code&gt;0 7 * * *&lt;/code&gt;, every day at 07:00 UTC).&lt;/li&gt;
&lt;li&gt;Send the result where you work: e-mail, Slack or Google Sheets, from the task's &lt;em&gt;Integrations&lt;/em&gt; tab.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"softwareentwickler"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"locations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"Berlin"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxListingsPerSearch"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyNew"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"monitorKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"softwareentwickler-berlin"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This input is for the stellenanzeigen.de Scraper, which has the only-new switch (&lt;code&gt;onlyNew&lt;/code&gt; plus a &lt;code&gt;monitorKey&lt;/code&gt; that names your watch list). On the XING scraper, use &lt;strong&gt;Posted within&lt;/strong&gt; (&lt;code&gt;postedWithinDays&lt;/code&gt;: 1 or 7) with a daily schedule to get the same effect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want your own cut: your stack, your city, your salary band?&lt;/strong&gt; Run the &lt;a href="https://apify.com/highbrow_fame/xing-jobs" rel="noopener noreferrer"&gt;XING Jobs Scraper&lt;/a&gt; or the &lt;a href="https://apify.com/highbrow_fame/stellenanzeigen-jobs" rel="noopener noreferrer"&gt;stellenanzeigen.de Scraper&lt;/a&gt; on Apify, type your keywords and towns, and get every job with its salary, work mode and posting date as a spreadsheet. The input forms are prefilled and the first run takes a minute.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next edition:&lt;/strong&gt; follow me here on dev.to for the next weekly count, and use the daily monitor above if you want new jobs in your inbox every morning.&lt;/p&gt;

</description>
      <category>data</category>
      <category>germany</category>
      <category>jobs</category>
      <category>career</category>
    </item>
  </channel>
</rss>
