<?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: PerskeKits</title>
    <description>The latest articles on DEV Community by PerskeKits (@perskekits).</description>
    <link>https://dev.to/perskekits</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%2F4225117%2Fe27f683b-a166-4f78-b65d-e98e2114135c.png</url>
      <title>DEV Community: PerskeKits</title>
      <link>https://dev.to/perskekits</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/perskekits"/>
    <language>en</language>
    <item>
      <title>How to Scrape Building Permits for Contractor Leads</title>
      <dc:creator>PerskeKits</dc:creator>
      <pubDate>Wed, 04 Nov 2026 14:07:47 +0000</pubDate>
      <link>https://dev.to/perskekits/how-to-scrape-building-permits-for-contractor-leads-9hf</link>
      <guid>https://dev.to/perskekits/how-to-scrape-building-permits-for-contractor-leads-9hf</guid>
      <description>&lt;p&gt;A building permit is a clear sign that work is about to start. Someone has a project, a budget and a timeline. For roofers, solar installers, HVAC and pool companies, remodelers, material suppliers and equipment rental businesses, new permits are some of the most targeted leads around.&lt;/p&gt;

&lt;p&gt;This guide covers where permit data comes from, why collecting it by hand is painful, and how to pull it from five major US cities with the &lt;a href="https://apify.com/perskekits/building-permits-multi-city" rel="noopener noreferrer"&gt;Building Permits Scraper&lt;/a&gt; on Apify.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Many cities publish permits on open-data portals, but every city uses its own dataset, field names and update schedule. One city calls it "work description," another calls it "permit type," and valuation fields vary in format. Comparing or combining cities means cleaning up each source separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  The manual way (and why it hurts)
&lt;/h2&gt;

&lt;p&gt;You could visit each city's portal, filter by issue date, export a CSV, and then line up the columns in a spreadsheet. Then you'd search the descriptions for "roof" or "solar" and repeat it all next week. Some portals limit exports or time out on large date ranges, and a few publish several days late, so it's easy to miss permits.&lt;/p&gt;

&lt;h2&gt;
  
  
  The sources
&lt;/h2&gt;

&lt;p&gt;The Actor reads official, public open-data portals that update daily:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;City&lt;/th&gt;
&lt;th&gt;Portal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chicago&lt;/td&gt;
&lt;td&gt;data.cityofchicago.org Building Permits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;td&gt;data.cityofnewyork.us DOB NOW Build Approved Permits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Los Angeles&lt;/td&gt;
&lt;td&gt;data.lacity.org Building Permits Issued 2020-present&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Austin&lt;/td&gt;
&lt;td&gt;data.austintexas.gov Issued Construction Permits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Seattle&lt;/td&gt;
&lt;td&gt;data.seattle.gov Building Permits&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Everything is normalized into one schema.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Configure the input
&lt;/h2&gt;

&lt;p&gt;Open the &lt;a href="https://apify.com/perskekits/building-permits-multi-city" rel="noopener noreferrer"&gt;Actor page&lt;/a&gt; and click &lt;strong&gt;Try for free&lt;/strong&gt;. The defaults:&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;"cities"&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;"chicago"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"new-york"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"los-angeles"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"austin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"seattle"&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;"daysBack"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxItemsPerCity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&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;Useful options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cities&lt;/code&gt;: any of &lt;code&gt;chicago&lt;/code&gt;, &lt;code&gt;new-york&lt;/code&gt;, &lt;code&gt;los-angeles&lt;/code&gt;, &lt;code&gt;austin&lt;/code&gt;, &lt;code&gt;seattle&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;daysBack&lt;/code&gt; or &lt;code&gt;dateFrom&lt;/code&gt; / &lt;code&gt;dateTo&lt;/code&gt;: the issue-date window.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;keywords&lt;/code&gt;: match any word in the work description, for example &lt;code&gt;["ROOF", "SOLAR", "POOL"]&lt;/code&gt;. Matching isn't case-sensitive.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;minValuation&lt;/code&gt;: a minimum reported job value. Permits without a value are excluded.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;maxItemsPerCity&lt;/code&gt;: a per-city cap, newest first.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: Read the output
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;city&lt;/th&gt;
&lt;th&gt;permitNumber&lt;/th&gt;
&lt;th&gt;issueDate&lt;/th&gt;
&lt;th&gt;permitType&lt;/th&gt;
&lt;th&gt;address&lt;/th&gt;
&lt;th&gt;valuation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chicago&lt;/td&gt;
&lt;td&gt;101083682&lt;/td&gt;
&lt;td&gt;2026-10-28&lt;/td&gt;
&lt;td&gt;PERMIT - RENOVATION/ALTERATION&lt;/td&gt;
&lt;td&gt;2620 W 51ST ST&lt;/td&gt;
&lt;td&gt;15000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chicago&lt;/td&gt;
&lt;td&gt;101084071&lt;/td&gt;
&lt;td&gt;2026-10-28&lt;/td&gt;
&lt;td&gt;PERMIT - NEW CONSTRUCTION&lt;/td&gt;
&lt;td&gt;1733 W JULIAN ST&lt;/td&gt;
&lt;td&gt;475000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chicago&lt;/td&gt;
&lt;td&gt;101084225&lt;/td&gt;
&lt;td&gt;2026-10-28&lt;/td&gt;
&lt;td&gt;PERMIT - RENOVATION/ALTERATION&lt;/td&gt;
&lt;td&gt;13122 S ELLIS AVE&lt;/td&gt;
&lt;td&gt;14500000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Full records also include status, applied date, work type, description, ZIP, latitude and longitude, and contractor, owner or applicant details where the city publishes them.&lt;/p&gt;

&lt;p&gt;Not every city publishes every field:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Contractor phone is only available for Austin.&lt;/li&gt;
&lt;li&gt;Owner name is only available for Chicago and New York.&lt;/li&gt;
&lt;li&gt;Los Angeles doesn't publish contractor names, and Chicago doesn't publish ZIP codes.&lt;/li&gt;
&lt;li&gt;Valuation is whatever the applicant reported, and some cities use placeholders like 0 or 1.&lt;/li&gt;
&lt;li&gt;Los Angeles usually runs three to five days behind.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Schedule it
&lt;/h2&gt;

&lt;p&gt;A one-off export is useful, but the real value is getting new records on a timetable without thinking about it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Apify Console, open &lt;strong&gt;Schedules&lt;/strong&gt; and click &lt;strong&gt;Create new&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the cron expression. For example, &lt;code&gt;0 6 * * *&lt;/code&gt; runs it every morning at 6:00.&lt;/li&gt;
&lt;li&gt;Add the Actor (Building Permits Scraper) and paste the same input JSON you used above.&lt;/li&gt;
&lt;li&gt;Optional: under the Actor's &lt;strong&gt;Integrations&lt;/strong&gt; tab, connect Google Sheets, Slack, Zapier, Make or a webhook so each finished run lands where your team already works.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a trade-specific feed, save one schedule per trade, such as a roofing schedule with &lt;code&gt;keywords: ["ROOF"]&lt;/code&gt; and a solar schedule with &lt;code&gt;keywords: ["SOLAR"]&lt;/code&gt;. Use a &lt;code&gt;daysBack&lt;/code&gt; of a few days so late-publishing cities are still covered, and de-duplicate on &lt;code&gt;permitNumber&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Run it from Python with apify-client
&lt;/h2&gt;

&lt;p&gt;If you'd rather pull the data into your own scripts or CRM, use the official &lt;code&gt;apify-client&lt;/code&gt; package (&lt;code&gt;pip install apify-client&lt;/code&gt;). Grab your API token from &lt;strong&gt;Settings &amp;gt; API &amp;amp; Integrations&lt;/strong&gt; in Apify Console and keep it in an environment variable rather than in code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;run_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cities&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;austin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;seattle&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;daysBack&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;keywords&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ROOF&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SOLAR&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;minValuation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxItemsPerCity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;perskekits/building-permits-multi-city&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;city&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;permitNumber&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;permitType&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;valuation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because each record has latitude and longitude, you can map the results or filter them to your service area before sending them to your sales team.&lt;/p&gt;

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

&lt;p&gt;The Actor uses Apify's pay-per-event pricing, so you pay for results, not for server time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;$0.005 per run start&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0.005 per permit&lt;/strong&gt; returned&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, 100 permits cost about $0.505, and 1,000 permits cost about $5.01. Apify's free plan includes a small amount of monthly platform credit, which is enough to try small runs. Check the Actor's pricing tab for the current rates before you run anything large.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Which cities are supported?&lt;/strong&gt;&lt;br&gt;
Chicago, New York City, Los Angeles, Austin and Seattle. You can request more cities on the Actor's Issues tab.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I filter by trade or job size?&lt;/strong&gt;&lt;br&gt;
Yes. Use &lt;code&gt;keywords&lt;/code&gt; for the trade and &lt;code&gt;minValuation&lt;/code&gt; for job size.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why are some fields empty?&lt;/strong&gt;&lt;br&gt;
Each city publishes a different set of fields. Anything a city doesn't publish comes back as &lt;code&gt;null&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How current is the data?&lt;/strong&gt;&lt;br&gt;
Most portals update daily. Los Angeles usually lags three to five days.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it legal to use permits for marketing?&lt;/strong&gt;&lt;br&gt;
Permits are public records. You're responsible for following CAN-SPAM, TCPA, do-not-call and any local rules when you contact owners or contractors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Permits tell you who's about to spend money on a building project. Instead of stitching together five portals, get one clean feed every morning. &lt;a href="https://apify.com/perskekits/building-permits-multi-city" rel="noopener noreferrer"&gt;Try the Building Permits Scraper on Apify&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>construction</category>
      <category>leadgeneration</category>
      <category>python</category>
      <category>opendata</category>
    </item>
    <item>
      <title>How to Track Startup Funding with SEC Form D Filings</title>
      <dc:creator>PerskeKits</dc:creator>
      <pubDate>Wed, 04 Nov 2026 13:40:45 +0000</pubDate>
      <link>https://dev.to/perskekits/how-to-track-startup-funding-with-sec-form-d-filings-1aki</link>
      <guid>https://dev.to/perskekits/how-to-track-startup-funding-with-sec-form-d-filings-1aki</guid>
      <description>&lt;p&gt;Companies that just raised money tend to spend it on hiring, software, agencies and office space. That makes funding announcements valuable for sales teams, recruiters and investors. But many private raises never make the news. The one place nearly all of them show up is an SEC filing called &lt;strong&gt;Form D&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This guide explains what Form D is, why reading it by hand is painful, and how to turn it into a clean daily feed with the &lt;a href="https://apify.com/perskekits/sec-form-d-funding-alerts" rel="noopener noreferrer"&gt;SEC Form D Funding Alerts Actor&lt;/a&gt; on Apify.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Form D?
&lt;/h2&gt;

&lt;p&gt;Companies raising money privately in the US under Regulation D must file a Form D with the SEC within 15 days of their first sale. The filing lists the company, its address and industry, the total offering size, how much has been sold so far, the minimum investment, and the executives, directors and promoters involved. It's all public on SEC EDGAR.&lt;/p&gt;

&lt;h2&gt;
  
  
  The manual way (and why it hurts)
&lt;/h2&gt;

&lt;p&gt;EDGAR lets you browse filings by form type, but each Form D is a separate document. To build a list you'd open filings one by one, read the XML or the rendered form, and type the key numbers into a spreadsheet. There are many filings each day, and a large share are investment funds rather than operating companies, so you'd also spend time filtering out noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Configure the input
&lt;/h2&gt;

&lt;p&gt;Open the &lt;a href="https://apify.com/perskekits/sec-form-d-funding-alerts" rel="noopener noreferrer"&gt;Actor page&lt;/a&gt; and click &lt;strong&gt;Try for free&lt;/strong&gt;. The defaults:&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;"daysBack"&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;"includeAmendments"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxItems"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&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;The filters that matter most:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;daysBack&lt;/code&gt; or &lt;code&gt;dateFrom&lt;/code&gt; / &lt;code&gt;dateTo&lt;/code&gt;: the filing-date window.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;industryGroups&lt;/code&gt;: exact SEC names such as &lt;code&gt;Other Technology&lt;/code&gt;, &lt;code&gt;Biotechnology&lt;/code&gt;, &lt;code&gt;Other Health Care&lt;/code&gt; or &lt;code&gt;Business Services&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;states&lt;/code&gt;: issuer business-address codes such as &lt;code&gt;CA&lt;/code&gt; or &lt;code&gt;NY&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;minOfferingAmount&lt;/code&gt;: skip small raises. Offerings marked "Indefinite" are kept.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;includeAmendments&lt;/code&gt;: also return D/A filings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; most Form D filings are investment funds. To focus on operating companies, set &lt;code&gt;industryGroups&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Read the output
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;companyName&lt;/th&gt;
&lt;th&gt;filingDate&lt;/th&gt;
&lt;th&gt;state&lt;/th&gt;
&lt;th&gt;industryGroup&lt;/th&gt;
&lt;th&gt;totalOfferingAmount&lt;/th&gt;
&lt;th&gt;totalAmountSold&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Soliton ID, Inc.&lt;/td&gt;
&lt;td&gt;2026-10-29&lt;/td&gt;
&lt;td&gt;A8&lt;/td&gt;
&lt;td&gt;Other Technology&lt;/td&gt;
&lt;td&gt;1000000&lt;/td&gt;
&lt;td&gt;105000&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GGxTB I, L.P.&lt;/td&gt;
&lt;td&gt;2026-10-29&lt;/td&gt;
&lt;td&gt;CA&lt;/td&gt;
&lt;td&gt;Pooled Investment Fund&lt;/td&gt;
&lt;td&gt;Indefinite&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Innovative Home Solutions USA LLC&lt;/td&gt;
&lt;td&gt;2026-10-29&lt;/td&gt;
&lt;td&gt;VA&lt;/td&gt;
&lt;td&gt;Residential&lt;/td&gt;
&lt;td&gt;11000000&lt;/td&gt;
&lt;td&gt;400000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Full records also include CIK, accession number, entity type, year of incorporation, address, revenue range, federal exemptions, the securities offered (for example SAFEs or equity), date of first sale, minimum investment, number of investors, sales compensation, related persons, and links to the filing.&lt;/p&gt;

&lt;p&gt;A few notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;state&lt;/code&gt; uses EDGAR codes, which include country codes. &lt;code&gt;A8&lt;/code&gt; above is a non-US code, and &lt;code&gt;stateOrCountryName&lt;/code&gt; spells it out.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;totalOfferingAmount&lt;/code&gt; can be the text &lt;code&gt;"Indefinite"&lt;/code&gt;, which is common for funds.&lt;/li&gt;
&lt;li&gt;The Actor follows SEC fair-access rules: it identifies itself and stays at or below five requests per second.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Schedule it
&lt;/h2&gt;

&lt;p&gt;A one-off export is useful, but the real value is getting new records on a timetable without thinking about it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Apify Console, open &lt;strong&gt;Schedules&lt;/strong&gt; and click &lt;strong&gt;Create new&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the cron expression. For example, &lt;code&gt;0 7 * * 1-5&lt;/code&gt; runs it at 7:00 every weekday, since EDGAR doesn't accept filings on weekends.&lt;/li&gt;
&lt;li&gt;Add the Actor (SEC Form D Funding Alerts) and paste the same input JSON you used above.&lt;/li&gt;
&lt;li&gt;Optional: under the Actor's &lt;strong&gt;Integrations&lt;/strong&gt; tab, connect Google Sheets, Slack, Zapier, Make or a webhook so each finished run lands where your team already works.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pair the schedule with a Slack or email integration and you'll get a short morning digest of new raises in your target industries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Run it from Python with apify-client
&lt;/h2&gt;

&lt;p&gt;If you'd rather pull the data into your own scripts or CRM, use the official &lt;code&gt;apify-client&lt;/code&gt; package (&lt;code&gt;pip install apify-client&lt;/code&gt;). Grab your API token from &lt;strong&gt;Settings &amp;gt; API &amp;amp; Integrations&lt;/strong&gt; in Apify Console and keep it in an environment variable rather than in code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;run_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;daysBack&lt;/span&gt;&lt;span class="sh"&gt;"&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;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;industryGroups&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Other Technology&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Biotechnology&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;minOfferingAmount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxItems&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;perskekits/sec-form-d-funding-alerts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;companyName&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;industryGroup&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;totalAmountSold&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;cik&lt;/code&gt; or &lt;code&gt;accessionNumber&lt;/code&gt; to de-duplicate, and link the &lt;code&gt;filingUrl&lt;/code&gt; in your alert so people can read the original filing.&lt;/p&gt;

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

&lt;p&gt;The Actor uses Apify's pay-per-event pricing, so you pay for results, not for server time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;$0.005 per run start&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0.003 per filing&lt;/strong&gt; returned&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, 100 filings cost about $0.305, and 1,000 filings cost about $3.01. Apify's free plan includes a small amount of monthly platform credit, which is enough to try small runs. Check the Actor's pricing tab for the current rates before you run anything large.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Where does the data come from?&lt;/strong&gt;&lt;br&gt;
SEC EDGAR, the official source for public filings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does every startup file a Form D?&lt;/strong&gt;&lt;br&gt;
No. It's required for Regulation D offerings, which cover most US private raises, but not every company or round. Treat it as a strong signal, not a complete list.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I filter by amount or industry?&lt;/strong&gt;&lt;br&gt;
Yes. Use &lt;code&gt;minOfferingAmount&lt;/code&gt;, &lt;code&gt;industryGroups&lt;/code&gt; and &lt;code&gt;states&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why do I see so many funds?&lt;/strong&gt;&lt;br&gt;
Pooled investment funds file Form D too. Filter by &lt;code&gt;industryGroups&lt;/code&gt; to remove them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it legal to use this data?&lt;/strong&gt;&lt;br&gt;
Form D filings are public records. If you use them for outreach, follow CAN-SPAM, TCPA and other applicable rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Form D is one of the most reliable public signals that a company has fresh money. Instead of digging through EDGAR, get it parsed and filtered every morning. &lt;a href="https://apify.com/perskekits/sec-form-d-funding-alerts" rel="noopener noreferrer"&gt;Try SEC Form D Funding Alerts on Apify&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>finance</category>
      <category>python</category>
      <category>opendata</category>
    </item>
    <item>
      <title>How to Get New LLC and Business Registration Leads from Official State Records</title>
      <dc:creator>PerskeKits</dc:creator>
      <pubDate>Wed, 04 Nov 2026 00:16:51 +0000</pubDate>
      <link>https://dev.to/perskekits/how-to-get-new-llc-and-business-registration-leads-from-official-state-records-4jah</link>
      <guid>https://dev.to/perskekits/how-to-get-new-llc-and-business-registration-leads-from-official-state-records-4jah</guid>
      <description>&lt;p&gt;A business that registered this week needs almost everything: a bank account, insurance, an accountant, payroll, a website, a logo and signage. If you sell any of those, the people who just filed an LLC are some of your warmest prospects, and they're easiest to win in their first few days.&lt;/p&gt;

&lt;p&gt;This guide shows how to get those new filings from official state records using the &lt;a href="https://apify.com/perskekits/new-business-registrations" rel="noopener noreferrer"&gt;New LLC and Business Registrations Actor&lt;/a&gt; on Apify.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;New business filings are public, but each state publishes them differently. Some states offer open-data portals and others only have a search box. Every portal uses different field names, and most aren't set up to show "everything filed this week."&lt;/p&gt;

&lt;h2&gt;
  
  
  The manual way (and why it hurts)
&lt;/h2&gt;

&lt;p&gt;You could go to each Secretary of State website and search by date, if the site even allows it, then copy the results into a spreadsheet. Some states sell bulk data files, which cost money and still need cleanup. Either way you're standardizing columns from different states by hand, and repeating the whole thing every week.&lt;/p&gt;

&lt;h2&gt;
  
  
  The sources
&lt;/h2&gt;

&lt;p&gt;The Actor currently covers three states with daily-updated open data:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;th&gt;Dataset&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;New York&lt;/td&gt;
&lt;td&gt;data.ny.gov Active Corporations&lt;/td&gt;
&lt;td&gt;county, registered agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Colorado&lt;/td&gt;
&lt;td&gt;data.colorado.gov Business Entities&lt;/td&gt;
&lt;td&gt;registered agent, link to the SOS record&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connecticut&lt;/td&gt;
&lt;td&gt;data.ct.gov Business Registry&lt;/td&gt;
&lt;td&gt;business email, NAICS industry, ownership flags&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Everything is normalized into one schema, so a filing from Connecticut looks the same as one from New York.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Configure the input
&lt;/h2&gt;

&lt;p&gt;Open the &lt;a href="https://apify.com/perskekits/new-business-registrations" rel="noopener noreferrer"&gt;Actor page&lt;/a&gt; and click &lt;strong&gt;Try for free&lt;/strong&gt;. The default input:&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;"states"&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;"NY"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"CO"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"CT"&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;"daysBack"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyWithEmail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxItemsPerState"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;20&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;Other options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;dateFrom&lt;/code&gt; / &lt;code&gt;dateTo&lt;/code&gt;: an exact filing-date range in &lt;code&gt;YYYY-MM-DD&lt;/code&gt; format.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;entityCategories&lt;/code&gt;: &lt;code&gt;LLC&lt;/code&gt;, &lt;code&gt;Corporation&lt;/code&gt;, &lt;code&gt;Nonprofit&lt;/code&gt;, &lt;code&gt;Partnership&lt;/code&gt; or &lt;code&gt;Other&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;nameKeyword&lt;/code&gt;: only names containing a word, for example &lt;code&gt;TRUCKING&lt;/code&gt; or &lt;code&gt;CLEANING&lt;/code&gt;. This is a quick way to target an industry.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;onlyWithEmail&lt;/code&gt;: Connecticut only, since it's the only state that publishes email. Other states are skipped when this is on.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: Read the output
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;state&lt;/th&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;entityType&lt;/th&gt;
&lt;th&gt;filingDate&lt;/th&gt;
&lt;th&gt;city&lt;/th&gt;
&lt;th&gt;county&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;NY&lt;/td&gt;
&lt;td&gt;1 WORLD VIEW HOLDING LLC&lt;/td&gt;
&lt;td&gt;Domestic Limited Liability Company&lt;/td&gt;
&lt;td&gt;2026-10-28&lt;/td&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NY&lt;/td&gt;
&lt;td&gt;100 BRYANT WOODS SOUTH LLC&lt;/td&gt;
&lt;td&gt;Domestic Limited Liability Company&lt;/td&gt;
&lt;td&gt;2026-10-28&lt;/td&gt;
&lt;td&gt;Amherst&lt;/td&gt;
&lt;td&gt;Erie&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;NY&lt;/td&gt;
&lt;td&gt;100 LOVEJOY LLC&lt;/td&gt;
&lt;td&gt;Domestic Limited Liability Company&lt;/td&gt;
&lt;td&gt;2026-10-28&lt;/td&gt;
&lt;td&gt;Pleasantville&lt;/td&gt;
&lt;td&gt;Westchester&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Full records also include category, entity ID, status, jurisdiction of formation, address, ZIP, registered agent, and a link to the state record where available. Connecticut rows add &lt;code&gt;email&lt;/code&gt;, &lt;code&gt;naics&lt;/code&gt; and ownership flags such as woman-, veteran- or minority-owned.&lt;/p&gt;

&lt;p&gt;Registries usually post filings one to two days after they're made, so the newest dates will lag slightly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Schedule it
&lt;/h2&gt;

&lt;p&gt;A one-off export is useful, but the real value is getting new records on a timetable without thinking about it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Apify Console, open &lt;strong&gt;Schedules&lt;/strong&gt; and click &lt;strong&gt;Create new&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the cron expression. For example, &lt;code&gt;0 8 * * 1-5&lt;/code&gt; runs it at 8:00 every weekday.&lt;/li&gt;
&lt;li&gt;Add the Actor (New LLC and Business Registrations) and paste the same input JSON you used above.&lt;/li&gt;
&lt;li&gt;Optional: under the Actor's &lt;strong&gt;Integrations&lt;/strong&gt; tab, connect Google Sheets, Slack, Zapier, Make or a webhook so each finished run lands where your team already works.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Set &lt;code&gt;daysBack&lt;/code&gt; to cover the gap between runs (for example &lt;code&gt;3&lt;/code&gt; for a run that also catches the weekend) and de-duplicate on &lt;code&gt;entityId&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Run it from Python with apify-client
&lt;/h2&gt;

&lt;p&gt;If you'd rather pull the data into your own scripts or CRM, use the official &lt;code&gt;apify-client&lt;/code&gt; package (&lt;code&gt;pip install apify-client&lt;/code&gt;). Grab your API token from &lt;strong&gt;Settings &amp;gt; API &amp;amp; Integrations&lt;/strong&gt; in Apify Console and keep it in an environment variable rather than in code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;run_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;states&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CO&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;daysBack&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;onlyWithEmail&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxItemsPerState&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nameKeyword&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CONSTRUCTION&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;perskekits/new-business-registrations&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;state&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;filingDate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;city&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Filtering by &lt;code&gt;nameKeyword&lt;/code&gt; plus a short &lt;code&gt;daysBack&lt;/code&gt; gives you a small, focused list you can review by hand each morning.&lt;/p&gt;

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

&lt;p&gt;The Actor uses Apify's pay-per-event pricing, so you pay for results, not for server time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;$0.005 per run start&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0.005 per business&lt;/strong&gt; returned&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, 100 businesses cost about $0.505, and 1,000 businesses cost about $5.01. Apify's free plan includes a small amount of monthly platform credit, which is enough to try small runs. Check the Actor's pricing tab for the current rates before you run anything large.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Which states are covered?&lt;/strong&gt;&lt;br&gt;
New York, Colorado and Connecticut. Requests for other states are welcome on the Actor's Issues tab.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do the records include emails?&lt;/strong&gt;&lt;br&gt;
Only Connecticut publishes a business email. The other states give you a name, address and registered agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How quickly do new filings appear?&lt;/strong&gt;&lt;br&gt;
Usually one to two days after filing, depending on the registry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it legal to use these leads?&lt;/strong&gt;&lt;br&gt;
The data comes from official public registries. You're responsible for following CAN-SPAM, TCPA and other applicable rules in your outreach. Keep in mind that a registered agent address isn't always the business's own address.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;New businesses are actively shopping for vendors, and state records tell you exactly who they are. Set up a schedule and get a clean list every day. &lt;a href="https://apify.com/perskekits/new-business-registrations" rel="noopener noreferrer"&gt;Try the New Business Registrations Actor&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>leadgeneration</category>
      <category>smallbusiness</category>
      <category>python</category>
      <category>opendata</category>
    </item>
    <item>
      <title>How to Find Newly Launched Shopify Stores for Outreach</title>
      <dc:creator>PerskeKits</dc:creator>
      <pubDate>Tue, 03 Nov 2026 23:32:28 +0000</pubDate>
      <link>https://dev.to/perskekits/how-to-find-newly-launched-shopify-stores-for-outreach-l86</link>
      <guid>https://dev.to/perskekits/how-to-find-newly-launched-shopify-stores-for-outreach-l86</guid>
      <description>&lt;p&gt;If you build Shopify apps, sell themes, run an agency or supply products, new merchants are your best prospects. A store that launched last week is still choosing apps, fixing its design and looking for suppliers. Store owners that have been around for years usually have all of that settled.&lt;/p&gt;

&lt;p&gt;The hard part is finding new stores at all. This guide explains how to do that with the &lt;a href="https://apify.com/perskekits/new-shopify-stores-finder" rel="noopener noreferrer"&gt;New Shopify Stores Finder&lt;/a&gt; on Apify.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Shopify doesn't publish a list of new stores. Lead databases exist, but they're often expensive, and their "new" stores can be months old by the time you see them. You want stores from the last few days.&lt;/p&gt;

&lt;h2&gt;
  
  
  The manual way (and why it hurts)
&lt;/h2&gt;

&lt;p&gt;The do-it-yourself approach goes like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download a daily feed of newly registered domains (tens of thousands a day).&lt;/li&gt;
&lt;li&gt;Run DNS lookups on each one to see which point to Shopify.&lt;/li&gt;
&lt;li&gt;Visit every match to collect the store name, country, product count and contact details.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Only a small share of new domains are Shopify stores, so you'd check thousands of domains to find a few dozen stores. That means writing and maintaining a script, handling DNS timeouts, and parsing each storefront.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the Actor does it
&lt;/h2&gt;

&lt;p&gt;The Actor automates exactly that process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It downloads the latest daily &lt;strong&gt;newly registered domains&lt;/strong&gt; feed from WhoisDS.&lt;/li&gt;
&lt;li&gt;It checks each domain's DNS. A store is detected when the domain or its &lt;code&gt;www.&lt;/code&gt; subdomain resolves into Shopify's &lt;code&gt;23.227.38.0/24&lt;/code&gt; range or CNAMEs to &lt;code&gt;shops.myshopify.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;It enriches each detected store from public pages: the homepage, &lt;code&gt;/meta.json&lt;/code&gt;, &lt;code&gt;/products.json&lt;/code&gt;, the contact page and the policy pages.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Domain checks are free. You only pay for stores saved to the dataset.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Configure the input
&lt;/h2&gt;

&lt;p&gt;Open the &lt;a href="https://apify.com/perskekits/new-shopify-stores-finder" rel="noopener noreferrer"&gt;Actor page&lt;/a&gt; and click &lt;strong&gt;Try for free&lt;/strong&gt;. These are the defaults:&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;"maxDomainsToCheck"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxStores"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyWithEmail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"skipPasswordProtected"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dnsConcurrency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="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;ul&gt;
&lt;li&gt;
&lt;code&gt;maxDomainsToCheck&lt;/code&gt;: how many new domains to test. 5,000 usually yields 50 or more stores.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;maxStores&lt;/code&gt;: stop after this many stores. This is your cost cap.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tlds&lt;/code&gt;, &lt;code&gt;keyword&lt;/code&gt;, &lt;code&gt;countries&lt;/code&gt;: narrow the search, for example &lt;code&gt;keyword: "pet"&lt;/code&gt; or &lt;code&gt;countries: ["US"]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;onlyWithEmail&lt;/code&gt; and &lt;code&gt;skipPasswordProtected&lt;/code&gt;: drop stores with no email, or stores that haven't launched yet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Filters are applied after detection, so raise &lt;code&gt;maxDomainsToCheck&lt;/code&gt; when you filter heavily.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Read the output
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;domain&lt;/th&gt;
&lt;th&gt;storeName&lt;/th&gt;
&lt;th&gt;country&lt;/th&gt;
&lt;th&gt;currency&lt;/th&gt;
&lt;th&gt;productCount&lt;/th&gt;
&lt;th&gt;firstProductPublishedAt&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;emone.store&lt;/td&gt;
&lt;td&gt;EMONE&lt;/td&gt;
&lt;td&gt;GB&lt;/td&gt;
&lt;td&gt;USD&lt;/td&gt;
&lt;td&gt;354&lt;/td&gt;
&lt;td&gt;2026-10-28T09:31:16-04:00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fkstorea.shop&lt;/td&gt;
&lt;td&gt;FK store&lt;/td&gt;
&lt;td&gt;PK&lt;/td&gt;
&lt;td&gt;PKR&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;2026-10-22T23:37:33+05:00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;shopamulusa.com&lt;/td&gt;
&lt;td&gt;Amul USA&lt;/td&gt;
&lt;td&gt;US&lt;/td&gt;
&lt;td&gt;USD&lt;/td&gt;
&lt;td&gt;99&lt;/td&gt;
&lt;td&gt;2026-10-16T17:58:27-04:00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Full records also include the theme, social profiles, price range, collection count, sample products, vendors, whether the store is password-protected, and public contact emails and phones when the store lists them. New stores rarely publish phone numbers, so &lt;code&gt;phones&lt;/code&gt; is often empty.&lt;/p&gt;

&lt;p&gt;The theme field is handy for theme sellers, and &lt;code&gt;productCount&lt;/code&gt; helps you separate real stores from placeholder sites.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Schedule it
&lt;/h2&gt;

&lt;p&gt;A one-off export is useful, but the real value is getting new records on a timetable without thinking about it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Apify Console, open &lt;strong&gt;Schedules&lt;/strong&gt; and click &lt;strong&gt;Create new&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the cron expression. For example, &lt;code&gt;0 9 * * *&lt;/code&gt; runs it every morning at 9:00.&lt;/li&gt;
&lt;li&gt;Add the Actor (New Shopify Stores Finder) and paste the same input JSON you used above.&lt;/li&gt;
&lt;li&gt;Optional: under the Actor's &lt;strong&gt;Integrations&lt;/strong&gt; tab, connect Google Sheets, Slack, Zapier, Make or a webhook so each finished run lands where your team already works.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The domain feed only covers the last few days, so a daily schedule is the best way to build a steady pipeline of fresh stores. Use the &lt;code&gt;date&lt;/code&gt; input if you need a specific feed date.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Run it from Python with apify-client
&lt;/h2&gt;

&lt;p&gt;If you'd rather pull the data into your own scripts or CRM, use the official &lt;code&gt;apify-client&lt;/code&gt; package (&lt;code&gt;pip install apify-client&lt;/code&gt;). Grab your API token from &lt;strong&gt;Settings &amp;gt; API &amp;amp; Integrations&lt;/strong&gt; in Apify Console and keep it in an environment variable rather than in code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;run_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxDomainsToCheck&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxStores&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;onlyWithEmail&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;skipPasswordProtected&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dnsConcurrency&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;countries&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;US&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;perskekits/new-shopify-stores-finder&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;domain&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;storeName&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;productCount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;theme&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can de-duplicate on &lt;code&gt;domain&lt;/code&gt; across days and enrich the list further before you reach out.&lt;/p&gt;

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

&lt;p&gt;The Actor uses Apify's pay-per-event pricing, so you pay for results, not for server time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;$0.005 per run start&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0.008 per store saved&lt;/strong&gt; returned&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Domain checks are free. For example, 50 stores cost about $0.405, and 1,000 stores cost about $8.01. Apify's free plan includes a small amount of monthly platform credit, which is enough to try small runs. Check the Actor's pricing tab for the current rates before you run anything large.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How new are the stores?&lt;/strong&gt;&lt;br&gt;
They come from domains registered in the last few days. Check &lt;code&gt;feedDate&lt;/code&gt; and &lt;code&gt;firstProductPublishedAt&lt;/code&gt; to see how recent each one is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why do I get fewer stores than &lt;code&gt;maxStores&lt;/code&gt;?&lt;/strong&gt;&lt;br&gt;
Only a small share of new domains point to Shopify. Raise &lt;code&gt;maxDomainsToCheck&lt;/code&gt; or loosen your filters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does "password protected" mean?&lt;/strong&gt;&lt;br&gt;
The store exists but hasn't launched to the public yet. Some sellers treat these as the earliest possible leads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it legal?&lt;/strong&gt;&lt;br&gt;
It only reads public pages and DNS records. Follow anti-spam laws such as CAN-SPAM and GDPR in any outreach, and keep messages relevant to the store.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Finding new merchants early is a real edge for agencies and app developers. Schedule the Actor once and you'll get fresh stores daily. &lt;a href="https://apify.com/perskekits/new-shopify-stores-finder" rel="noopener noreferrer"&gt;Try the New Shopify Stores Finder&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>ecommerce</category>
      <category>leadgeneration</category>
      <category>python</category>
    </item>
    <item>
      <title>How to Export Judge.me, Yotpo, Okendo, Loox and Stamped Reviews from Any Shopify Store</title>
      <dc:creator>PerskeKits</dc:creator>
      <pubDate>Tue, 03 Nov 2026 23:24:05 +0000</pubDate>
      <link>https://dev.to/perskekits/how-to-export-judgeme-yotpo-okendo-loox-and-stamped-reviews-from-any-shopify-store-4dcm</link>
      <guid>https://dev.to/perskekits/how-to-export-judgeme-yotpo-okendo-loox-and-stamped-reviews-from-any-shopify-store-4dcm</guid>
      <description>&lt;p&gt;Product reviews are some of the most useful data in ecommerce. They tell you what buyers actually care about, which products are worth stocking, and which words customers use when they describe a problem. The trouble is getting them out of a store in a usable format.&lt;/p&gt;

&lt;p&gt;This guide covers the common reasons you might need a review export, why doing it by hand is slow, and how to do it in a few minutes with the &lt;a href="https://apify.com/perskekits/shopify-reviews-scraper" rel="noopener noreferrer"&gt;Shopify Reviews Scraper&lt;/a&gt; on Apify.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;Shopify itself doesn't store most reviews. Stores use third-party apps such as &lt;strong&gt;Judge.me, Yotpo, Okendo, Loox or Stamped.io&lt;/strong&gt;, and each one has its own widget, its own data format and its own export tool. That creates a few headaches:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Competitor research:&lt;/strong&gt; you can't use the app's export button on a store you don't own.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review migration:&lt;/strong&gt; moving from one app to another means mapping columns between formats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product research:&lt;/strong&gt; if you're comparing ten stores, you're dealing with up to five different widget layouts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Voice-of-customer and AI work:&lt;/strong&gt; sentiment analysis and summarization need clean text in one schema.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The manual way (and why it hurts)
&lt;/h2&gt;

&lt;p&gt;Without a tool, you'd open each product page, scroll the review widget, click "load more" until it stops, then copy and paste the text into a spreadsheet. Then you'd repeat that for every product. A store with a few hundred products can take a full day, star ratings and dates often don't paste cleanly, and you have to start over next month to catch new reviews.&lt;/p&gt;

&lt;p&gt;If you own the store, the review app's CSV export works, but only for your store, and only in that app's own format.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Open the Actor and set your input
&lt;/h2&gt;

&lt;p&gt;Go to the &lt;a href="https://apify.com/perskekits/shopify-reviews-scraper" rel="noopener noreferrer"&gt;Shopify Reviews Scraper page&lt;/a&gt; and click &lt;strong&gt;Try for free&lt;/strong&gt;. The default input already works, so you can press &lt;strong&gt;Start&lt;/strong&gt; right away to see what you get. Here are the defaults:&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;"storeUrls"&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;"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.brooklinen.com"&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;"maxReviewsPerStore"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxProductsPerStore"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"includeProducts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&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;ul&gt;
&lt;li&gt;
&lt;code&gt;storeUrls&lt;/code&gt;: store homepages. The Actor finds the products and &lt;strong&gt;detects the review app automatically&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;maxReviewsPerStore&lt;/code&gt;: a cap so you control cost.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;maxProductsPerStore&lt;/code&gt;: how many products to scan per store.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;includeProducts&lt;/code&gt;: set to &lt;code&gt;true&lt;/code&gt; if you also want the product list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can also pass &lt;code&gt;productUrls&lt;/code&gt; to scrape just a few specific products. You don't need a login, an API key or proxies, because the Actor reads the same public widgets shoppers see.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Read the output
&lt;/h2&gt;

&lt;p&gt;Every review comes back in the same format, no matter which app the store uses. Here's a trimmed example:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;storeUrl&lt;/th&gt;
&lt;th&gt;reviewApp&lt;/th&gt;
&lt;th&gt;productTitle&lt;/th&gt;
&lt;th&gt;rating&lt;/th&gt;
&lt;th&gt;title&lt;/th&gt;
&lt;th&gt;date&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://feals.com" rel="noopener noreferrer"&gt;https://feals.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;judgeme&lt;/td&gt;
&lt;td&gt;The Sleep Gummies&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Sleeping again!!&lt;/td&gt;
&lt;td&gt;2026-10-29T19:54:41Z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://feals.com" rel="noopener noreferrer"&gt;https://feals.com&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;judgeme&lt;/td&gt;
&lt;td&gt;The Sleep Gummies&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;2026-10-28T16:11:48Z&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Full records also include the review body, a verified-buyer flag, helpful votes, photo and video URLs and the store's reply. You can download the dataset as CSV, Excel, JSON or XML.&lt;/p&gt;

&lt;p&gt;A few things to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Loox&lt;/strong&gt; grid widgets don't show dates, so &lt;code&gt;date&lt;/code&gt; is empty for those stores.&lt;/li&gt;
&lt;li&gt;Stores that use an unsupported app return a single &lt;code&gt;reviewApp: "unsupported"&lt;/code&gt; item, which isn't charged.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Okendo&lt;/strong&gt; and &lt;strong&gt;Stamped&lt;/strong&gt; use a fast store-wide feed. For the other apps, lowering &lt;code&gt;maxProductsPerStore&lt;/code&gt; speeds things up.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Schedule it
&lt;/h2&gt;

&lt;p&gt;A one-off export is useful, but the real value is getting new records on a timetable without thinking about it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Apify Console, open &lt;strong&gt;Schedules&lt;/strong&gt; and click &lt;strong&gt;Create new&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the cron expression. For example, &lt;code&gt;0 8 * * *&lt;/code&gt; runs it every morning at 8:00.&lt;/li&gt;
&lt;li&gt;Add the Actor (Shopify Reviews Scraper) and paste the same input JSON you used above.&lt;/li&gt;
&lt;li&gt;Optional: under the Actor's &lt;strong&gt;Integrations&lt;/strong&gt; tab, connect Google Sheets, Slack, Zapier, Make or a webhook so each finished run lands where your team already works.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To monitor new reviews, keep &lt;code&gt;maxReviewsPerStore&lt;/code&gt; small. Judge.me, Okendo and Stamped return the newest reviews first, so a daily run picks up recent feedback without re-downloading the whole history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Run it from Python with apify-client
&lt;/h2&gt;

&lt;p&gt;If you'd rather pull the data into your own scripts or CRM, use the official &lt;code&gt;apify-client&lt;/code&gt; package (&lt;code&gt;pip install apify-client&lt;/code&gt;). Grab your API token from &lt;strong&gt;Settings &amp;gt; API &amp;amp; Integrations&lt;/strong&gt; in Apify Console and keep it in an environment variable rather than in code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;run_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;storeUrls&lt;/span&gt;&lt;span class="sh"&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.brooklinen.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxReviewsPerStore&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxProductsPerStore&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;250&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;includeProducts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;perskekits/shopify-reviews-scraper&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;productTitle&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rating&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;From there you can write rows to a database, feed review text to a sentiment model, or push low-star reviews into a Slack channel.&lt;/p&gt;

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

&lt;p&gt;The Actor uses Apify's pay-per-event pricing, so you pay for results, not for server time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;$0.005 per run start&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0.0005 per review&lt;/strong&gt; returned&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That works out to $0.50 per 1,000 reviews. For example, 100 reviews cost about $0.055, and 1,000 reviews cost about $0.51. Stores where no reviews are found only cost the start fee. Apify's free plan includes a small amount of monthly platform credit, which is enough to try small runs. Check the Actor's pricing tab for the current rates before you run anything large.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Which review apps are supported?&lt;/strong&gt;&lt;br&gt;
Judge.me, Yotpo, Okendo, Loox and Stamped.io. The app is detected per store, so you can mix stores in a single run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need access to the store?&lt;/strong&gt;&lt;br&gt;
No. Only public review data that's visible on the storefront is collected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it collect customer emails?&lt;/strong&gt;&lt;br&gt;
No. Reviewer names are returned only the way the store displays them, usually a first name and last initial.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use it to migrate reviews between apps?&lt;/strong&gt;&lt;br&gt;
It gives you every review in one consistent schema, which makes column mapping much easier. Check your destination app's import format before you upload.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it legal?&lt;/strong&gt;&lt;br&gt;
It collects publicly visible content only. You're responsible for using the data in line with applicable laws such as GDPR and the website's terms.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My store isn't detected. What now?&lt;/strong&gt;&lt;br&gt;
It may use an app that isn't supported yet, such as Shopify Product Reviews, Reviews.io or Fera. Open an issue on the Actor's Issues tab with the URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;Exporting reviews shouldn't take a day of copying and pasting. Add a store URL, press Start, and you'll have every review in one clean format. &lt;a href="https://apify.com/perskekits/shopify-reviews-scraper" rel="noopener noreferrer"&gt;Try the Shopify Reviews Scraper on Apify&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>shopify</category>
      <category>ecommerce</category>
      <category>python</category>
      <category>webscraping</category>
    </item>
    <item>
      <title>How to Get a Daily List of New FMCSA Trucking Carriers with Phone and Email</title>
      <dc:creator>PerskeKits</dc:creator>
      <pubDate>Tue, 03 Nov 2026 23:23:30 +0000</pubDate>
      <link>https://dev.to/perskekits/how-to-get-a-daily-list-of-new-fmcsa-trucking-carriers-with-phone-and-email-49m</link>
      <guid>https://dev.to/perskekits/how-to-get-a-daily-list-of-new-fmcsa-trucking-carriers-with-phone-and-email-49m</guid>
      <description>&lt;p&gt;If you sell to trucking companies, timing is everything. A carrier that just got its USDOT number needs insurance, a factoring partner, an ELD, fuel cards, a dispatcher and compliance help, and it usually picks vendors in its first few weeks. The companies that reach new carriers first tend to get the business.&lt;/p&gt;

&lt;p&gt;This guide shows how to get a fresh list of new FMCSA registrations every day using the &lt;a href="https://apify.com/perskekits/fmcsa-new-carriers" rel="noopener noreferrer"&gt;FMCSA New Trucking Companies Actor&lt;/a&gt; on Apify.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;FMCSA publishes everything you need as public data, but it's spread across several datasets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;Company Census&lt;/strong&gt; lists each USDOT registration with its add date, contact details, address and fleet size.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operating authority&lt;/strong&gt; data (MC, FF and MX dockets, status and insurance on file) lives in separate datasets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To build one useful lead list you have to filter by date, join the datasets on the USDOT number, and clean up the fields.&lt;/p&gt;

&lt;h2&gt;
  
  
  The manual way (and why it hurts)
&lt;/h2&gt;

&lt;p&gt;You can look carriers up one at a time on FMCSA's SAFER site, but that only works if you already know the DOT number. You can also download the open datasets from data.transportation.gov, but they're large, the column names are cryptic, and joining census data with authority history in a spreadsheet is tedious. Then you'd have to do it again tomorrow, because new carriers register every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Configure the Actor
&lt;/h2&gt;

&lt;p&gt;Open the &lt;a href="https://apify.com/perskekits/fmcsa-new-carriers" rel="noopener noreferrer"&gt;Actor page&lt;/a&gt; and click &lt;strong&gt;Try for free&lt;/strong&gt;. The defaults return results with one click:&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;"daysBack"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"entityType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"all"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyWithEmail"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyActive"&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;"includeAuthority"&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;"maxItems"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="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;Useful options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;daysBack&lt;/code&gt;: carriers added in the last N days. Use &lt;code&gt;dateFrom&lt;/code&gt; and &lt;code&gt;dateTo&lt;/code&gt; for an exact range.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;states&lt;/code&gt;: two-letter codes such as &lt;code&gt;["TX", "FL"]&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;entityType&lt;/code&gt;: &lt;code&gt;all&lt;/code&gt;, &lt;code&gt;for-hire&lt;/code&gt;, &lt;code&gt;private&lt;/code&gt;, &lt;code&gt;exempt&lt;/code&gt;, &lt;code&gt;with-mc&lt;/code&gt; (has an MC docket) or &lt;code&gt;hazmat&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;onlyWithEmail&lt;/code&gt;: keep only carriers that listed an email on their MCS-150 filing.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;onlyActive&lt;/code&gt;: only active USDOT status.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;includeAuthority&lt;/code&gt;: add authority status, insurance and history.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: Read the output
&lt;/h2&gt;

&lt;p&gt;Here are a few columns from a real run:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;dotNumber&lt;/th&gt;
&lt;th&gt;mcNumber&lt;/th&gt;
&lt;th&gt;legalName&lt;/th&gt;
&lt;th&gt;state&lt;/th&gt;
&lt;th&gt;entityType&lt;/th&gt;
&lt;th&gt;powerUnits&lt;/th&gt;
&lt;th&gt;dateAdded&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;4803982&lt;/td&gt;
&lt;td&gt;MC60564415&lt;/td&gt;
&lt;td&gt;OYAMO HOLDINGS LLC&lt;/td&gt;
&lt;td&gt;CA&lt;/td&gt;
&lt;td&gt;AUTHORIZED FOR HIRE&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;2026-10-27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5120409&lt;/td&gt;
&lt;td&gt;MC58565412&lt;/td&gt;
&lt;td&gt;TTWFO LLC&lt;/td&gt;
&lt;td&gt;TX&lt;/td&gt;
&lt;td&gt;AUTHORIZED FOR HIRE&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2026-10-27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5201529&lt;/td&gt;
&lt;td&gt;MC94631113&lt;/td&gt;
&lt;td&gt;HIGHLAND CREST TRANSPORT CORP&lt;/td&gt;
&lt;td&gt;CA&lt;/td&gt;
&lt;td&gt;AUTHORIZED FOR HIRE&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2026-10-27&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Full records also include phone, email, officer names, physical and mailing address, trucks, drivers, cargo types, operation type, an FMCSA snapshot link, and an &lt;code&gt;authority&lt;/code&gt; list showing docket status, minimum coverage and whether BIPD, cargo insurance or a bond is on file.&lt;/p&gt;

&lt;p&gt;Some things to keep in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Results are sorted newest first, and the most recent add date is usually yesterday.&lt;/li&gt;
&lt;li&gt;Fields are &lt;code&gt;null&lt;/code&gt; when the carrier didn't report them.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;authority&lt;/code&gt; is often &lt;code&gt;null&lt;/code&gt; for brand-new or intrastate-only carriers that haven't applied for operating authority.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A carrier with authority status &lt;strong&gt;Pending&lt;/strong&gt; and no insurance on file is usually a good fit for insurance agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Schedule it
&lt;/h2&gt;

&lt;p&gt;A one-off export is useful, but the real value is getting new records on a timetable without thinking about it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Apify Console, open &lt;strong&gt;Schedules&lt;/strong&gt; and click &lt;strong&gt;Create new&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Set the cron expression. For example, &lt;code&gt;0 7 * * *&lt;/code&gt; runs it every morning at 7:00.&lt;/li&gt;
&lt;li&gt;Add the Actor (FMCSA New Trucking Companies) and paste the same input JSON you used above.&lt;/li&gt;
&lt;li&gt;Optional: under the Actor's &lt;strong&gt;Integrations&lt;/strong&gt; tab, connect Google Sheets, Slack, Zapier, Make or a webhook so each finished run lands where your team already works.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For a daily feed, set &lt;code&gt;daysBack&lt;/code&gt; to &lt;code&gt;1&lt;/code&gt; or &lt;code&gt;2&lt;/code&gt; so each run only returns the newest carriers. Then send the results to a Google Sheet or your CRM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Run it from Python with apify-client
&lt;/h2&gt;

&lt;p&gt;If you'd rather pull the data into your own scripts or CRM, use the official &lt;code&gt;apify-client&lt;/code&gt; package (&lt;code&gt;pip install apify-client&lt;/code&gt;). Grab your API token from &lt;strong&gt;Settings &amp;gt; API &amp;amp; Integrations&lt;/strong&gt; in Apify Console and keep it in an environment variable rather than in code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;APIFY_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;run_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;daysBack&lt;/span&gt;&lt;span class="sh"&gt;"&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;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;entityType&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;all&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;onlyWithEmail&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;onlyActive&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;includeAuthority&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;maxItems&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;states&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TX&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FL&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;perskekits/fmcsa-new-carriers&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dotNumber&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;legalName&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;state&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;entityType&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each item is a plain dictionary, so you can de-duplicate on &lt;code&gt;dotNumber&lt;/code&gt; and upsert straight into your CRM.&lt;/p&gt;

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

&lt;p&gt;The Actor uses Apify's pay-per-event pricing, so you pay for results, not for server time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;$0.005 per run start&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;$0.004 per carrier&lt;/strong&gt; returned&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, 100 carriers cost about $0.405, and 1,000 carriers cost about $4.00. Apify's free plan includes a small amount of monthly platform credit, which is enough to try small runs. Check the Actor's pricing tab for the current rates before you run anything large.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How fresh is the data?&lt;/strong&gt;&lt;br&gt;
FMCSA refreshes the source datasets daily. The newest add date is usually the previous day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it include email addresses?&lt;/strong&gt;&lt;br&gt;
Yes, when the carrier listed one on its MCS-150 filing. Use &lt;code&gt;onlyWithEmail&lt;/code&gt; to keep only those.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I filter by state or carrier type?&lt;/strong&gt;&lt;br&gt;
Yes. Use &lt;code&gt;states&lt;/code&gt; and &lt;code&gt;entityType&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where does the data come from?&lt;/strong&gt;&lt;br&gt;
Official FMCSA open data on data.transportation.gov: the Company Census plus the Motus carrier and authority history datasets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is it legal to use for outreach?&lt;/strong&gt;&lt;br&gt;
The data is public, but you're responsible for following CAN-SPAM, TCPA and any other rules that apply to how you contact people, including do-not-call rules for phone outreach.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;New carriers are an easy market to reach, as long as you hear about them first. Set up a daily schedule once and you'll have a list waiting every morning. &lt;a href="https://apify.com/perskekits/fmcsa-new-carriers" rel="noopener noreferrer"&gt;Get started with the FMCSA New Carriers Actor&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>trucking</category>
      <category>leadgeneration</category>
      <category>python</category>
      <category>opendata</category>
    </item>
  </channel>
</rss>
