<?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: Dan Mullaney</title>
    <description>The latest articles on DEV Community by Dan Mullaney (@programmableyou).</description>
    <link>https://dev.to/programmableyou</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%2F4229060%2F35d9b303-a53b-4f4f-98fd-b827dde75600.png</url>
      <title>DEV Community: Dan Mullaney</title>
      <link>https://dev.to/programmableyou</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/programmableyou"/>
    <language>en</language>
    <item>
      <title>Enrich a column of company websites in Google Sheets with one formula</title>
      <dc:creator>Dan Mullaney</dc:creator>
      <pubDate>Thu, 05 Nov 2026 17:31:56 +0000</pubDate>
      <link>https://dev.to/programmableyou/enrich-a-column-of-company-websites-in-google-sheets-with-one-formula-2gf5</link>
      <guid>https://dev.to/programmableyou/enrich-a-column-of-company-websites-in-google-sheets-with-one-formula-2gf5</guid>
      <description>&lt;p&gt;I build Programmable, so this is a post about my own tool. But the pattern is useful on its own: a Google Sheet can call any URL that returns CSV, and that's enough to turn a column of company websites into a researched list without a script, an add-on or a Zap.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one formula
&lt;/h2&gt;

&lt;p&gt;Say column A has company websites, starting in A2. Put this in B2 and fill it down:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=IMPORTDATA("https://programmable.info/x/live?key=YOUR_KEY&amp;amp;header=0&amp;amp;domains="&amp;amp;ENCODEURL(A2))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three things are doing the work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;IMPORTDATA&lt;/code&gt;&lt;/strong&gt; fetches a URL and spills the CSV it returns across the row. Google runs the request, so there's no Apps Script and nothing to authorize.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ENCODEURL(A2)&lt;/code&gt;&lt;/strong&gt; keeps odd characters in the domain from breaking the query string.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;header=0&lt;/code&gt;&lt;/strong&gt; drops the column-name row. Without it, every filled-down formula would repeat the headers and you'd get a header row between every company.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each row comes back with the company name, industry, HQ, headcount, tech stack (CMS, ecommerce platform, analytics), social links, open roles and email setup (SPF, DKIM, DMARC).&lt;/p&gt;

&lt;h2&gt;
  
  
  Pick only the columns you want
&lt;/h2&gt;

&lt;p&gt;The full row is wide. Add &lt;code&gt;columns=&lt;/code&gt; in plain words:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;=IMPORTDATA("https://programmable.info/x/live?key=YOUR_KEY&amp;amp;header=0&amp;amp;columns=tech stack, hiring&amp;amp;domains="&amp;amp;ENCODEURL(A2))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also ask your own question, and it comes back as a column answered from the company's own pages, with a one-line reason:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://programmable.info/x/live?domains=stripe.com&amp;amp;ask=Who do they sell to?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Two things I'd warn you about
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;A key in a cell is visible to anyone who can see the sheet.&lt;/strong&gt; Don't paste your main API key into a shared sheet. Make a share key locked to that link, with a row cap and an AI cap, and use that instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sheets recalculates when it feels like it.&lt;/strong&gt; &lt;code&gt;IMPORTDATA&lt;/code&gt; re-fetches every so often. For a one-off list, copy the results and paste them as values once they're in. If you'd rather call formulas by name, there's an add-on with &lt;code&gt;PROGRAMMABLE_ROW(A2, "company, tech stack, hiring")&lt;/code&gt; that caches for six hours so a recalculation doesn't spend credits again.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same thing from curl
&lt;/h2&gt;

&lt;p&gt;The link is just an HTTP GET, so anything that can make a request can use it. Add &lt;code&gt;format=json&lt;/code&gt; for JSON instead of CSV:&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="nt"&gt;-G&lt;/span&gt; &lt;span class="s2"&gt;"https://programmable.info/x/live"&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;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$PROGRAMMABLE_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data-urlencode&lt;/span&gt; &lt;span class="s2"&gt;"domains=stripe.com, atlassian.com"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data-urlencode&lt;/span&gt; &lt;span class="s2"&gt;"columns=tech stack, email setup"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data-urlencode&lt;/span&gt; &lt;span class="s2"&gt;"format=json"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's also how it plugs into Zapier, n8n or Make: one webhook step with the company's website mapped into &lt;code&gt;domains&lt;/code&gt;. There's an MCP server too (&lt;code&gt;https://programmable.info/api/mcp&lt;/code&gt;) if you'd rather ask from Claude or Cursor.&lt;/p&gt;

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

&lt;p&gt;A row is one credit, plus one for each extra-cost column group (the email finder, leadership, performance and marketplaces). New accounts start with 500 credits included and no card. Rows are built when you ask and aren't stored; only public company facts are cached.&lt;/p&gt;

&lt;p&gt;If you try it, I'd like to hear which columns you actually keep. That decides what I build next.&lt;/p&gt;

&lt;p&gt;Docs: &lt;a href="https://programmable.info/developers" rel="noopener noreferrer"&gt;https://programmable.info/developers&lt;/a&gt;&lt;/p&gt;

</description>
      <category>googlesheets</category>
      <category>api</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
