<?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: Rowcraft</title>
    <description>The latest articles on DEV Community by Rowcraft (@rowcraft).</description>
    <link>https://dev.to/rowcraft</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%2F4201212%2F7c15db00-eff0-4973-a0be-6f9e8e74318f.png</url>
      <title>DEV Community: Rowcraft</title>
      <link>https://dev.to/rowcraft</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rowcraft"/>
    <language>en</language>
    <item>
      <title>Look up Brazilian companies by CNPJ, or find them by state, city and CNAE code</title>
      <dc:creator>Rowcraft</dc:creator>
      <pubDate>Thu, 22 Oct 2026 21:19:20 +0000</pubDate>
      <link>https://dev.to/rowcraft/look-up-brazilian-companies-by-cnpj-or-find-them-by-state-city-and-cnae-code-3m4</link>
      <guid>https://dev.to/rowcraft/look-up-brazilian-companies-by-cnpj-or-find-them-by-state-city-and-cnae-code-3m4</guid>
      <description>&lt;p&gt;Brazil has one of the richest public company registers, but getting it into a spreadsheet is awkward: the Receita Federal publishes monthly dumps of several gigabytes, and web lookups work one CNPJ at a time.&lt;/p&gt;

&lt;p&gt;I built an Apify tool on top of the free community service minhareceita.org (with OpenCNPJ as a fallback for lookups). Disclosure: I made it and it is paid, 1 USD per 1,000 companies on the free plan, and the free monthly credit covers your first runs.&lt;/p&gt;

&lt;p&gt;Two modes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lookup: paste CNPJ numbers (with or without dots) and get the register data back. A number with wrong check digits is reported without a request, and numbers that do not exist are not charged.&lt;/li&gt;
&lt;li&gt;Search: states (UF), 7-digit CNAE activity codes, IBGE city codes, legal nature codes, opening date, active companies only, head offices only.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example: listed software companies in São Paulo.&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="s2"&gt;"SP"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"activityCodes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"6201501"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"6202300"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"6209100"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"6311900"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"legalNatureCodes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"2054"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2046"&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;Each row: CNPJ, legal name, trade name, status and reason, main and secondary CNAE, legal nature, capital, size, address of the establishment, opening date. Real rows are on the example page, no account needed.&lt;/p&gt;

&lt;p&gt;Privacy by design: no partners, no e-mail, no phone. Sole traders (MEI, "Empresário Individual") and other legal forms named after a person are skipped and never charged, because their register entry can carry the person's tax number.&lt;/p&gt;

&lt;p&gt;Tip: name a legal nature such as 2054 (closed corporation) or 2046 (open corporation) in a search. Without it the tool also reads many sole-trader records only to skip them, which is slower.&lt;/p&gt;

&lt;p&gt;Example page: &lt;a href="https://apify.com/rowcraft/brazil-cnpj-companies-scraper/examples/listed-software-companies-sao-paulo-cnpj" rel="noopener noreferrer"&gt;https://apify.com/rowcraft/brazil-cnpj-companies-scraper/examples/listed-software-companies-sao-paulo-cnpj&lt;/a&gt;&lt;br&gt;
Tool page: &lt;a href="https://apify.com/rowcraft/brazil-cnpj-companies-scraper" rel="noopener noreferrer"&gt;https://apify.com/rowcraft/brazil-cnpj-companies-scraper&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback and missing filters: the Issues tab of the tool, I answer within a day.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>brazil</category>
      <category>data</category>
      <category>api</category>
    </item>
    <item>
      <title>Get US federal contract opportunities as clean JSON, without a SAM.gov API key</title>
      <dc:creator>Rowcraft</dc:creator>
      <pubDate>Thu, 22 Oct 2026 21:18:13 +0000</pubDate>
      <link>https://dev.to/rowcraft/get-us-federal-contract-opportunities-as-clean-json-without-a-samgov-api-key-3fcc</link>
      <guid>https://dev.to/rowcraft/get-us-federal-contract-opportunities-as-clean-json-without-a-samgov-api-key-3fcc</guid>
      <description>&lt;p&gt;If you sell to the US government, you probably watch SAM.gov for new solicitations. The website is fine for browsing, but if you want the notices in a spreadsheet, a CRM or an alert script, you hit two walls: the official API needs a registered key with strict rate limits, and the daily extract is a 200 MB CSV with columns you have to decode.&lt;/p&gt;

&lt;p&gt;I built a small tool that reads the official GSA Contract Opportunities extract (the one published on open.gsa.gov) and returns only the notices you filter for, as JSON or CSV. Disclosure: I made it and it is a paid tool on the Apify Store, 2 USD per 1,000 notices on the free plan, and the free monthly credit covers your first test runs.&lt;/p&gt;

&lt;p&gt;What you can filter by: keywords (and keywords to exclude), NAICS and PSC codes, set-asides (small business, 8(a), HUBZone, SDVOSB and others), notice types, agencies, states, posting date, open notices only, award date and amount.&lt;/p&gt;

&lt;p&gt;Example: open IT solicitations posted in the last 14 days.&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;"naics"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"5415"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"noticeTypes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"solicitation"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"combined-synopsis-solicitation"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"openOnly"&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;"publishedAfter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"14 days"&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;Each row has the title, notice type, agency, NAICS, set-aside, response deadline, posted date, place of performance, description and the link to the notice on SAM.gov. The first rows of a real run are on the example page, you can open it without an account.&lt;/p&gt;

&lt;p&gt;What it does not do, on purpose: it does not return contact names, e-mails or phone numbers (the contact columns are never read, and e-mails and phones inside the description text are removed). It is for finding opportunities, not for building a contact list.&lt;/p&gt;

&lt;p&gt;Try the example: &lt;a href="https://apify.com/rowcraft/sam-gov-contract-opportunities-scraper/examples/open-it-solicitations-last-14-days" rel="noopener noreferrer"&gt;https://apify.com/rowcraft/sam-gov-contract-opportunities-scraper/examples/open-it-solicitations-last-14-days&lt;/a&gt;&lt;br&gt;
Tool page: &lt;a href="https://apify.com/rowcraft/sam-gov-contract-opportunities-scraper" rel="noopener noreferrer"&gt;https://apify.com/rowcraft/sam-gov-contract-opportunities-scraper&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If a filter you need is missing, tell me in the comments or in the tool's Issues tab and I will look at it.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>api</category>
      <category>data</category>
      <category>government</category>
    </item>
  </channel>
</rss>
