<?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>Christmas shoppers now ask ChatGPT where to buy. John Lewis was in 0 of 9 answers</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Wed, 04 Nov 2026 09:31:51 +0000</pubDate>
      <link>https://dev.to/projectdev/christmas-shoppers-now-ask-chatgpt-where-to-buy-john-lewis-was-in-0-of-9-answers-e4f</link>
      <guid>https://dev.to/projectdev/christmas-shoppers-now-ask-chatgpt-where-to-buy-john-lewis-was-in-0-of-9-answers-e4f</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclosure: I built the tool used in this post. Written with AI assistance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;"Best place to buy Christmas gifts online in the UK." More and more shoppers type a question like that into ChatGPT, Perplexity or Gemini instead of Google, and they shop where the answer sends them.&lt;/p&gt;

&lt;p&gt;So I asked. Three Christmas gift questions, three AI engines, one answer each, nine answers in total, on 3 November 2026. Then I checked which retailers the answers named.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who the AI sent shoppers to
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Retailer&lt;/th&gt;
&lt;th&gt;Named in (of 9 answers)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Amazon&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Boots&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Argos&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Selfridges&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Oliver Bonas&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Firebox&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Marks &amp;amp; Spencer&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Not On The High Street&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;John Lewis&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;John Lewis, the shop many Britons think of first for Christmas, was not named once, by any of the three engines. Its AI Visibility Score for these questions: &lt;strong&gt;0 out of 100&lt;/strong&gt;. Amazon scored 24, Argos 17.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why: the engines read gift guides, not shop windows
&lt;/h3&gt;

&lt;p&gt;The answers cited 110 sources. The most-cited site was &lt;strong&gt;Good Housekeeping's gift guides&lt;/strong&gt; (6 citations), then a gift-list site (4). &lt;em&gt;Which?&lt;/em&gt;, Argos and Selfridges had 2 each. An AI answer to "what should I buy dad?" is mostly a summary of the gift guides it found. (Two of the three questions named no country, so some of those guides were American: the engines answer from whatever they find.)&lt;/p&gt;

&lt;p&gt;That gives every retailer and brand a clear to-do list for the next seven weeks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Find out which gift questions your buyers ask&lt;/strong&gt;, and whether the answers name you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;See which guides the engines quote&lt;/strong&gt; for those questions. Those editors are your outreach list.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-check every week.&lt;/strong&gt; Gift guides are updated and republished all through November and December, and the answers move with them.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Run the same check for your shop (about 2 minutes)
&lt;/h3&gt;

&lt;p&gt;I used the &lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;AI Search Visibility Tracker&lt;/a&gt; on Apify. Paste this input with your own domain and questions:&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;"queries"&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;"Best place to buy Christmas gifts online in the UK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"What are the best Christmas gifts for dad in 2026, and where should I buy them online?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"Best Christmas gift ideas for teenagers 2026"&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;"brandDomains"&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="s2"&gt;"yourshop.co.uk"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"competitorDomains"&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="s2"&gt;"amazon.co.uk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"argos.co.uk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"notonthehighstreet.com"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engines"&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="s2"&gt;"perplexity-agent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openai"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gemini"&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;No AI API keys needed. For every answer you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether your shop is cited or named, and who is named instead,&lt;/li&gt;
&lt;li&gt;every source URL the engine relied on, which is your outreach list,&lt;/li&gt;
&lt;li&gt;one 0-100 AI Visibility Score, a score per engine and a competitor leaderboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cost:&lt;/strong&gt; $0.05 per answer. The test above (9 answers) costs $0.45. Ten gift questions on three engines every week until Christmas is about $1.50 a week.&lt;/p&gt;

&lt;h3&gt;
  
  
  Make it a weekly Christmas report
&lt;/h3&gt;

&lt;p&gt;Save the input as a task and add a schedule in Apify Console (&lt;em&gt;Schedules → Create schedule&lt;/em&gt;, &lt;code&gt;0 8 * * 1&lt;/code&gt; runs every Monday). From the second run on, the tracker tells you what changed: answers that now name you, answers that dropped you, new competitors. Selling outside the UK? Set &lt;code&gt;"language": "de"&lt;/code&gt;, &lt;code&gt;"fr"&lt;/code&gt; or &lt;code&gt;"es"&lt;/code&gt; and ask the way your local shoppers ask.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Christmas shoppers are already asking. &lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;Check what the AI tells them about your shop&lt;/a&gt; while there is still time to change the answer.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>ecommerce</category>
      <category>marketing</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>Is that Black Friday deal real? Check Coles, Woolworths, Tesco and Sainsbury's specials in 20 lines of JavaScript</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Tue, 03 Nov 2026 10:06:12 +0000</pubDate>
      <link>https://dev.to/projectdev/is-that-black-friday-deal-real-check-coles-woolworths-tesco-and-sainsburys-specials-in-20-lines-f7n</link>
      <guid>https://dev.to/projectdev/is-that-black-friday-deal-real-check-coles-woolworths-tesco-and-sainsburys-specials-in-20-lines-f7n</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;Black Friday is on 27 November. Every supermarket banner will say SPECIAL, and shoppers will ask one question: &lt;strong&gt;is this actually cheaper?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I checked this morning (3 November 2026). Of the 20 chocolate specials Coles had online, &lt;strong&gt;14 were real price drops&lt;/strong&gt; (most of them half price), &lt;strong&gt;4 only saved money if you bought two&lt;/strong&gt;, and &lt;strong&gt;2 carried a special label with a saving of $0&lt;/strong&gt;. Same banner, three very different deals.&lt;/p&gt;

&lt;p&gt;You can tell them apart automatically. Every product from the supermarket price APIs below comes back with the price, the was-price and the offer type, and one parameter, &lt;code&gt;onlySpecials=true&lt;/code&gt;, returns only the products on offer. That is everything a deal checker needs.&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;Try the Australian Supermarket Prices API on RapidAPI&lt;/a&gt;&lt;/strong&gt;: Coles, Woolworths, ALDI, IGA and Harris Farm, free plan included.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The deal checker (20 lines)
&lt;/h2&gt;

&lt;p&gt;Save as &lt;code&gt;deals.mjs&lt;/code&gt;, run 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;APIS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;au&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&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;australian-supermarket-prices-api-coles-woolworths-aldi.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="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/grocery-au/search&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;uk&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&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;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="na"&gt;path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/grocery-uk/search&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="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;country&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;au&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;store&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;coles&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;chocolate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&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="nf"&gt;slice&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="kd"&gt;const&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="nx"&gt;path&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;APIS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;country&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="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;?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;onlySpecials=true&amp;amp;limit=20`&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;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="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="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="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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;drop&lt;/span&gt; &lt;span class="o"&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;wasPrice&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;price&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&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="o"&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;wasPrice&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&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;verdict&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;drop&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;% off today`&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;multiBuy&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="s2"&gt;`saves only if you buy &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;multiBuy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;quantity&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&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;no price drop&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&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="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;44&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;was&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;wasPrice&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="nx"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;verdict&lt;/span&gt; &lt;span class="p"&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;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;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;drop&lt;/span&gt; &lt;span class="o"&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;drop&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;map&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;drop&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;r&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;r&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 deals.mjs au coles chocolate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What it printed on 3 November 2026 (shortened):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name                                          price  was  verdict
KitKat Mini Milk Chocolate Share Pack 11 Pie   3.75  7.5  50% off today
Toblerone Milk Chocolate                      10     20   50% off today
Lindt Teddy &amp;amp; Friends Chocolate Advent Calen  20     30   33% off today
Kinder Surprise Chocolate Egg                  1.95  2.8  30% off today
Lindt Lindor Assorted Chocolate Cornet        30     30   saves only if you buy 2
Cadbury Favourites Chocolate Gift Box         14     14   saves only if you buy 2
Maltesers Milk Chocolate Party &amp;amp; Share Bucke  15     15   no price drop
M&amp;amp;M's Milk Chocolate Party &amp;amp; Share Bucket     15     15   no price drop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Lindor cornet is a "Pick any 2 for $30" offer: one costs exactly what it cost before. The Maltesers bucket is flagged as a special ("while stocks last") with a saving of zero. A shopper scrolling past a yellow tag would never know. Your app does.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Same code, UK supermarkets
&lt;/h2&gt;

&lt;p&gt;Change two arguments:&lt;br&gt;
&lt;/p&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 deals.mjs uk sainsburys christmas
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;name                                          price  was   verdict
Galaxy 234g Chocolate Large Christmas Select   2.75  4.5   39% off today
Cadbury 125g Chocolate Christmas Selection B   1.65  2.5   34% off today
Maltesers 108g Reindeer Chocolate Christmas    2.5   3.75  33% off today
Lindt 5 x 50g Santa Christmas Milk Chocolate   3     3.5   14% off today
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sainsbury's also returns the date each offer ends. On 3 November, 7 of the 8 chocolate offers we pulled &lt;strong&gt;ended on 24 November, three days before Black Friday&lt;/strong&gt;. If your users plan their Black Friday shop, that is worth telling them.&lt;/p&gt;

&lt;p&gt;Other stores work the same way: &lt;code&gt;store=tesco|sainsburys|asda|morrisons&lt;/code&gt; in the UK, &lt;code&gt;store=coles|woolworths|aldi|iga|harris-farm&lt;/code&gt; in Australia, and &lt;strong&gt;&lt;a href="https://rapidapi.com/highbrowfame/api/new-zealand-supermarket-prices-api-woolworths-countdown" rel="noopener noreferrer"&gt;Woolworths New Zealand&lt;/a&gt;&lt;/strong&gt; with &lt;code&gt;/grocery-nz/search?store=woolworths-nz&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. The real test: your own price history
&lt;/h2&gt;

&lt;p&gt;The was-price is the store's claim. The strongest answer to "is this deal real?" is your own record: if the Black Friday price is not below the lowest price you saw in November, it is not a Black Friday deal.&lt;/p&gt;

&lt;p&gt;Add five lines and run the checker once a day (cron, a GitHub Action, a serverless timer):&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="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node:fs&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;file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;prices.json&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;history&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;existsSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;utf8&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="p"&gt;{};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;today&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toISOString&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;for &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;p&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;history&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;url&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;??=&lt;/span&gt; &lt;span class="p"&gt;{})[&lt;/span&gt;&lt;span class="nx"&gt;today&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&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="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;history&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Start today and you have 24 days of history by Black Friday.&lt;/strong&gt; Start on the day and you have one. That is the whole difference between a deal checker and a list of yellow tags.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you can build before 27 November
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A "real deal or not" page&lt;/strong&gt; for your city: the top specials sorted by real percentage off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A Black Friday basket alert&lt;/strong&gt;: watch 20 products, ping Discord or Slack when one drops below its November low.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A newsletter or social feed&lt;/strong&gt; of the week's genuine half-price items at Coles, Woolworths or Tesco.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An AI shopping assistant tool&lt;/strong&gt; that answers "is this a good price?" with data instead of a guess.&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: one daily check of one search, every day until Black Friday&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;
  
  
  Black Friday is in 24 days
&lt;/h2&gt;

&lt;p&gt;The deal checkers that will matter on 27 November are the ones collecting prices now. The free plan is enough to wire this up today and let it run.&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;Get your free key for the Australian Supermarket Prices API&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://rapidapi.com/highbrowfame/api/uk-supermarket-prices-tesco-sainsburys-asda-morrisons" rel="noopener noreferrer"&gt;UK Supermarket Prices API (Tesco, Sainsbury's, Asda, Morrisons)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>api</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Does ChatGPT recommend your brand in Germany? Measuring AI visibility in German, French and Spanish</title>
      <dc:creator>ByteHarvester</dc:creator>
      <pubDate>Mon, 02 Nov 2026 12:55:55 +0000</pubDate>
      <link>https://dev.to/projectdev/does-chatgpt-recommend-your-brand-in-germany-measuring-ai-visibility-in-german-french-and-spanish-4i6b</link>
      <guid>https://dev.to/projectdev/does-chatgpt-recommend-your-brand-in-germany-measuring-ai-visibility-in-german-french-and-spanish-4i6b</guid>
      <description>&lt;p&gt;Your buyers in Munich, Lyon and Madrid don't ask ChatGPT in English. They ask &lt;em&gt;"Beste HR-Software für kleine und mittlere Unternehmen"&lt;/em&gt;, and the answer they get is built from a different set of sources than the English one. If you only check AI visibility in English, you are blind in exactly the markets where you are trying to grow.&lt;/p&gt;

&lt;p&gt;I measured it today with the &lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;AI Search Visibility Tracker&lt;/a&gt; on Apify. Three German questions, three engines, one well-known German brand.&lt;/p&gt;

&lt;h3&gt;
  
  
  The test
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Brand:&lt;/strong&gt; personio.de (HR software)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitors:&lt;/strong&gt; kenjo.io, sage.com, hrworks.de&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Questions (German):&lt;/strong&gt;

&lt;ol&gt;
&lt;li&gt;Beste HR-Software für kleine und mittlere Unternehmen&lt;/li&gt;
&lt;li&gt;Welche Personalverwaltungssoftware empfehlt ihr für ein Startup in Deutschland?&lt;/li&gt;
&lt;li&gt;HR-Software mit Lohnabrechnung für KMU in Deutschland&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engines:&lt;/strong&gt; ChatGPT, Perplexity, Gemini, one answer each (9 answers)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What came back
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Score (0-100)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;personio.de (overall)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;69&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Perplexity&lt;/td&gt;
&lt;td&gt;76&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini&lt;/td&gt;
&lt;td&gt;77&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ChatGPT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;52&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Competitor leaderboard: kenjo.io 52, sage.com 51, hrworks.de 30.&lt;/p&gt;

&lt;p&gt;Three things stand out:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Even a market leader has a ChatGPT gap.&lt;/strong&gt; Personio was cited in 8 of 9 answers, but ChatGPT left it out entirely for the payroll question (&lt;em&gt;"HR-Software mit Lohnabrechnung…"&lt;/em&gt;). That one question is a buying-intent query. If you sell payroll in Germany, that is where the money is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The sources are local.&lt;/strong&gt; 57 of the 115 sources the three engines cited were German &lt;em&gt;.de&lt;/em&gt; sites: comparison portals, German review sites, local publishers. Your English-language PR and backlinks barely show up here. To win the German answer, you need to be on the German list.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engines disagree.&lt;/strong&gt; Perplexity and Gemini rate Personio in the high 70s, ChatGPT in the low 50s. Checking one engine gives you one opinion, not the market.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Run the same check for your brand (about 2 minutes)
&lt;/h3&gt;

&lt;p&gt;Open the &lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;tracker&lt;/a&gt; and paste this input with your own domain and questions:&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;"queries"&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;"Beste HR-Software für kleine und mittlere Unternehmen"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"HR-Software mit Lohnabrechnung für KMU in Deutschland"&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;"brandDomains"&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="s2"&gt;"yourcompany.de"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"competitorDomains"&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="s2"&gt;"competitor-one.de"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"competitor-two.com"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engines"&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="s2"&gt;"perplexity-agent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"openai"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gemini"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"language"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"de"&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;Switch &lt;code&gt;"language"&lt;/code&gt; to &lt;code&gt;"fr"&lt;/code&gt;, &lt;code&gt;"es"&lt;/code&gt;, &lt;code&gt;"it"&lt;/code&gt;, &lt;code&gt;"pt"&lt;/code&gt;, &lt;code&gt;"pl"&lt;/code&gt; or any of 24 languages and write the questions the way a local buyer would. No AI API keys needed. You get, per answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;whether your brand is cited and named, and who is named instead,&lt;/li&gt;
&lt;li&gt;every source URL the engine relied on (that is your outreach list),&lt;/li&gt;
&lt;li&gt;one 0-100 AI Visibility Score, a score per engine and a competitor leaderboard.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cost:&lt;/strong&gt; $0.05 per answer. The test above (9 answers) is $0.45. A weekly check of 6 questions × 3 engines is under $1 a week. Want to try it first? The &lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker/examples/free-sample-is-your-brand-cited-by-perplexity" rel="noopener noreferrer"&gt;free sample&lt;/a&gt; runs 3 questions with no result fee.&lt;/p&gt;

&lt;h3&gt;
  
  
  Make it a weekly report
&lt;/h3&gt;

&lt;p&gt;AI answers change week to week. Save your input as a task and add a schedule in Apify Console (&lt;em&gt;Schedules → Create schedule&lt;/em&gt;, &lt;code&gt;0 8 * * 1&lt;/code&gt; for every Monday). From the second run on, the tracker tells you what changed: answers that now cite you, answers that dropped you, new competitors.&lt;/p&gt;

&lt;p&gt;If you'd rather call it from your own dashboard, the same check is available as a REST API on &lt;a href="https://rapidapi.com/highbrow_fame/api/ai-visibility-api-chatgpt-perplexity-claude-gemini" rel="noopener noreferrer"&gt;RapidAPI&lt;/a&gt; with a &lt;code&gt;language&lt;/code&gt; parameter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your German, French and Spanish buyers are already asking AI. &lt;a href="https://apify.com/highbrow_fame/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;Check what they are told about you&lt;/a&gt;, before your competitor does.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This post was written with AI assistance. The measurement is a real run from 2026-11-02; your results will differ by question, day and engine.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>marketing</category>
      <category>chatgpt</category>
    </item>
    <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>
  </channel>
</rss>
