<?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: Bence Kadi</title>
    <description>The latest articles on DEV Community by Bence Kadi (@kadi_bence).</description>
    <link>https://dev.to/kadi_bence</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%2F4163834%2F34588045-ecb9-4b82-8682-d6a3979efb42.png</url>
      <title>DEV Community: Bence Kadi</title>
      <link>https://dev.to/kadi_bence</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kadi_bence"/>
    <language>en</language>
    <item>
      <title>See who won an EU public contract before you bid on it (free TED data)</title>
      <dc:creator>Bence Kadi</dc:creator>
      <pubDate>Mon, 26 Oct 2026 08:00:00 +0000</pubDate>
      <link>https://dev.to/kadi_bence/see-who-won-an-eu-public-contract-before-you-bid-on-it-free-ted-data-47j3</link>
      <guid>https://dev.to/kadi_bence/see-who-won-an-eu-public-contract-before-you-bid-on-it-free-ted-data-47j3</guid>
      <description>&lt;p&gt;When a public buyer in the EU re-tenders a service, the most useful question for a bidder is rarely "what do they want?". It's &lt;strong&gt;"who has the contract now, and what did they get paid?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That tells you who you're up against, whether the incumbent is a giant or a three-person shop, and what price the buyer accepted last time. The answer is public: every above-threshold contract award in the EU is published on &lt;strong&gt;TED (Tenders Electronic Daily)&lt;/strong&gt;. It's just scattered across thousands of separate notices.&lt;/p&gt;

&lt;p&gt;This guide shows how to get the previous winner next to every open tender, in one table, without code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I built the tool used in this guide, the EU Public Tenders Scraper (TED) on Apify.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A real example
&lt;/h2&gt;

&lt;p&gt;The Estonian Transport Administration (Transpordiamet) is tendering maintenance of its traffic counting devices for 2027-2029, estimated at EUR 210,000, closing 23 November 2026.&lt;/p&gt;

&lt;p&gt;The previous contract, for 2025-2027, was published on TED on 3 February 2025: it went to &lt;strong&gt;AS Signaal TM for EUR 188,880&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So before writing a single page of the bid you know the incumbent, the price the buyer accepted two years ago, and that the new budget is about 11% higher. Finding that by hand takes a few TED searches per tender. With a weekly list of 50 tenders, it doesn't happen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Run the search with "who won before" switched on
&lt;/h2&gt;

&lt;p&gt;Open &lt;a href="https://apify.com/kadi_bence/ted-tenders-scraper" rel="noopener noreferrer"&gt;EU Public Tenders Scraper (TED)&lt;/a&gt; and click &lt;strong&gt;Try for free&lt;/strong&gt; (a free Apify account is enough). Use this input, or set the same fields in the form:&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;"countries"&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;"EE"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cpvCodes"&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;"72000000"&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;"contract_notice"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"publishedWithinDays"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"includePreviousAward"&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;"maxResults"&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;ul&gt;
&lt;li&gt;
&lt;code&gt;countries&lt;/code&gt;: ISO codes, e.g. &lt;code&gt;DE&lt;/code&gt;, &lt;code&gt;FR&lt;/code&gt;, &lt;code&gt;IT&lt;/code&gt;, or leave empty for all of Europe.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cpvCodes&lt;/code&gt;: the EU categories of what is bought. &lt;code&gt;72000000&lt;/code&gt; is IT services, &lt;code&gt;48000000&lt;/code&gt; software, &lt;code&gt;45000000&lt;/code&gt; construction, &lt;code&gt;79000000&lt;/code&gt; business services. Sub-categories are included automatically.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;includePreviousAward&lt;/code&gt;: the new part. For every open tender, the Actor searches the same buyer's contract awards of the last 5 years in the same CPV division and adds the most similar one.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: Read the &lt;code&gt;previousAward&lt;/code&gt; column
&lt;/h2&gt;

&lt;p&gt;Each open tender gets a &lt;code&gt;previousAward&lt;/code&gt; object:&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;"publicationNumber"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"72778-2025"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"publicationDate"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2025-02-03"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Liiklusloendusseadmete hooldus 2025-2027"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"winners"&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;"AS Signaal TM"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"awardedValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;188880&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"awardedCurrency"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EUR"&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://ted.europa.eu/en/notice/-/detail/72778-2025"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"matchScore"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.1&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;&lt;code&gt;matchScore&lt;/code&gt; says how close the titles are: around 1 means the same system or service (often literally the previous edition of the same contract), 0.45 to 0.7 a related contract. Always open the &lt;code&gt;url&lt;/code&gt; before you quote a number to anyone.&lt;/p&gt;

&lt;p&gt;Not every tender gets a match, and that's on purpose. Buyers reuse words like "framework agreement" or "open procedure" in every title, and a wrong "previous winner" is worse than none. The matching ignores the buyer's own name and those procedural words, and weights rare words (a system name, a product) much higher than common ones ("development", "maintenance"). In a test on Estonian IT tenders, about half got a previous award, and the matches were the previous edition of the same contract or the same system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Make it a weekly routine
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Save the input as a &lt;strong&gt;Task&lt;/strong&gt; and add a &lt;strong&gt;Schedule&lt;/strong&gt; (e.g. every Monday 07:00).&lt;/li&gt;
&lt;li&gt;Turn on &lt;strong&gt;Only new notices&lt;/strong&gt; so each run returns only tenders you haven't seen.&lt;/li&gt;
&lt;li&gt;Connect the dataset to &lt;strong&gt;Google Sheets&lt;/strong&gt;, Slack or e-mail with Apify's integrations.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You now get every Monday: new tenders in your sector, with deadlines, estimated values and the incumbent with their price.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it's good for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bid / no-bid decisions:&lt;/strong&gt; an incumbent that has held the contract for years is a different fight from a first-time purchase.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing:&lt;/strong&gt; the awarded value of the previous edition is the best anchor you will get.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Partner search:&lt;/strong&gt; small incumbents are sometimes better partners than competitors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consultancies:&lt;/strong&gt; one list for all your clients, filtered per client by CPV and country.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;TED covers tenders above the EU thresholds. Smaller tenders are only on national portals.&lt;/li&gt;
&lt;li&gt;Some award notices name no winner (e.g. natural persons, which the Actor leaves out for GDPR reasons) or publish a placeholder value like EUR 1; those values are dropped.&lt;/li&gt;
&lt;li&gt;Framework agreements split between several winners show all of them; the value is the framework maximum, not what each winner earned.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pricing is per notice ($1.50 per 1,000), and the previous-award lookup is included.&lt;/p&gt;

&lt;p&gt;If you try it on your sector, I'd like to hear which matches were useful and which were wrong.&lt;/p&gt;

</description>
      <category>opendata</category>
      <category>webscraping</category>
      <category>productivity</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to download all Platsbanken job ads for a Swedish city to Excel</title>
      <dc:creator>Bence Kadi</dc:creator>
      <pubDate>Tue, 20 Oct 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/kadi_bence/how-to-download-all-platsbanken-job-ads-for-a-swedish-city-to-excel-1ded</link>
      <guid>https://dev.to/kadi_bence/how-to-download-all-platsbanken-job-ads-for-a-swedish-city-to-excel-1ded</guid>
      <description>&lt;p&gt;&lt;strong&gt;Platsbanken&lt;/strong&gt; is the national job board of Arbetsförmedlingen, the Swedish Public Employment Service. It has more than 40,000 live job ads, and an archive of every ad since 2016.&lt;/p&gt;

&lt;p&gt;Recruiters, staffing agencies, researchers and companies that sell to Swedish employers often need these ads in a spreadsheet: all developer jobs in Stockholm and Gothenburg, all nursing jobs in Skåne, all part-time jobs with no experience required. The Platsbanken website has no export. Arbetsförmedlingen has a good open-data API, but it uses taxonomy codes and stops at 2,100 results per search.&lt;/p&gt;

&lt;p&gt;This guide shows how to get the ads into Excel with plain English input, without code and without the 2,100 limit.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I built the tool used in this guide, the Sweden Jobs Scraper on Apify.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Run the example
&lt;/h2&gt;

&lt;p&gt;Open &lt;a href="https://apify.com/kadi_bence/sweden-jobs-scraper" rel="noopener noreferrer"&gt;Sweden Jobs Scraper - Platsbanken&lt;/a&gt; and click &lt;strong&gt;Try for free&lt;/strong&gt; (free Apify account needed). The prefilled 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;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"developer"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"locations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Stockholm"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"maxResults"&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;Click &lt;strong&gt;Start&lt;/strong&gt;. The Actor gets about 4,000-5,000 jobs per minute, so this test takes a few seconds and costs about $0.02.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Enter keywords and places
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keywords (&lt;code&gt;keywords&lt;/code&gt;):&lt;/strong&gt; one search per line, in Swedish or English (&lt;code&gt;utvecklare&lt;/code&gt;, &lt;code&gt;data engineer&lt;/code&gt;, &lt;code&gt;sjuksköterska&lt;/code&gt;). Most ads are in Swedish, so add Swedish terms too.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Locations (&lt;code&gt;locations&lt;/code&gt;):&lt;/strong&gt; municipalities or counties. English spellings work (&lt;code&gt;Gothenburg&lt;/code&gt;), and so do counties (&lt;code&gt;Skåne län&lt;/code&gt;). A bare name means the municipality: &lt;code&gt;Stockholm&lt;/code&gt; is the city, &lt;code&gt;Stockholms län&lt;/code&gt; is the whole county.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Max results (&lt;code&gt;maxResults&lt;/code&gt;):&lt;/strong&gt; &lt;code&gt;0&lt;/code&gt; means all. The Console prefill is 20; if you call the Actor via API without it, the default is 500.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Add filters (optional)
&lt;/h2&gt;

&lt;p&gt;Example: full-time developer jobs in Stockholm and Göteborg from the last 7 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;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"developer"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"locations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Stockholm"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Göteborg"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"workingTime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"full_time"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"publishedWithinDays"&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;"maxResults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&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 filters: &lt;code&gt;occupationFields&lt;/code&gt; (for example &lt;code&gt;["it"]&lt;/code&gt;), &lt;code&gt;employmentTypes&lt;/code&gt; (&lt;code&gt;permanent&lt;/code&gt;, &lt;code&gt;fixed_term&lt;/code&gt;, &lt;code&gt;substitute&lt;/code&gt;, &lt;code&gt;on_call&lt;/code&gt;, &lt;code&gt;seasonal&lt;/code&gt;), &lt;code&gt;remoteOnly&lt;/code&gt;, &lt;code&gt;noExperienceRequired&lt;/code&gt;, &lt;code&gt;employer&lt;/code&gt; (name or organisation number), and a radius search with &lt;code&gt;coordinates&lt;/code&gt; + &lt;code&gt;radiusKm&lt;/code&gt; (default 10 km).&lt;/p&gt;

&lt;p&gt;For history, set &lt;code&gt;dataSource&lt;/code&gt; to &lt;code&gt;historical&lt;/code&gt; and give a date range with &lt;code&gt;publishedFrom&lt;/code&gt; / &lt;code&gt;publishedTo&lt;/code&gt; (for example &lt;code&gt;"2023-01-01"&lt;/code&gt;). Without a date range, keyword or location, a historical search covers every ad since 2016.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Export
&lt;/h2&gt;

&lt;p&gt;Open the run's &lt;strong&gt;Output&lt;/strong&gt; tab and click &lt;strong&gt;Export&lt;/strong&gt; (Excel, CSV or JSON).&lt;/p&gt;

&lt;h2&gt;
  
  
  What the output looks like
&lt;/h2&gt;

&lt;p&gt;One row per ad. Real example from a test run (2026-10-05):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;title&lt;/th&gt;
&lt;th&gt;employer&lt;/th&gt;
&lt;th&gt;organizationNumber&lt;/th&gt;
&lt;th&gt;municipality&lt;/th&gt;
&lt;th&gt;region&lt;/th&gt;
&lt;th&gt;postedDate&lt;/th&gt;
&lt;th&gt;deadline&lt;/th&gt;
&lt;th&gt;workingTime&lt;/th&gt;
&lt;th&gt;workMode&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Teknisk Supportspecialist med intresse för systemutveckling!&lt;/td&gt;
&lt;td&gt;Academic Work Sweden AB&lt;/td&gt;
&lt;td&gt;5565595450&lt;/td&gt;
&lt;td&gt;Stockholm&lt;/td&gt;
&lt;td&gt;Stockholms län&lt;/td&gt;
&lt;td&gt;2026-10-02&lt;/td&gt;
&lt;td&gt;2027-03-31&lt;/td&gt;
&lt;td&gt;full_time&lt;/td&gt;
&lt;td&gt;hybrid&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You also get &lt;code&gt;occupation&lt;/code&gt;, &lt;code&gt;occupationField&lt;/code&gt;, &lt;code&gt;employmentType&lt;/code&gt;, &lt;code&gt;latitude&lt;/code&gt;/&lt;code&gt;longitude&lt;/code&gt;, &lt;code&gt;url&lt;/code&gt;, &lt;code&gt;externalUrl&lt;/code&gt; (the employer's apply page), required skills and languages, and the description. Salary in SEK is parsed when the ad gives a number; most Swedish ads say "lön enligt överenskommelse", so expect many empty salary cells. By default, contact persons' names, e-mails and phone numbers are removed (&lt;code&gt;stripContactInfo&lt;/code&gt;).&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;$0.80 per 1,000 jobs&lt;/strong&gt; ($0.0008 per saved job), plus Apify's standard start fee of $0.00005 per run. Platform compute is included.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1,000 jobs: about $0.80&lt;/li&gt;
&lt;li&gt;All ~40,000 live ads in Sweden: about $32&lt;/li&gt;
&lt;li&gt;A daily monitor that finds 50 new ads: about $0.04 per day, about $1.20 per month&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cap your spend with &lt;strong&gt;Max results&lt;/strong&gt; or the run's &lt;strong&gt;Max charge per run&lt;/strong&gt; setting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automation tip: new ads every morning
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Turn on &lt;strong&gt;Only new jobs&lt;/strong&gt; (&lt;code&gt;onlyNewJobs: true&lt;/code&gt;). The first run returns all matching ads as a baseline. After that, each run returns only ads it has not returned before (marked &lt;code&gt;isNew: true&lt;/code&gt;), and you pay only for those.&lt;/li&gt;
&lt;li&gt;Save the input as a &lt;strong&gt;task&lt;/strong&gt; and add a daily &lt;strong&gt;Schedule&lt;/strong&gt; in Apify Console (for example 07:00). If two schedules use the same search, give each one its own &lt;strong&gt;Monitor name&lt;/strong&gt; (&lt;code&gt;monitorName&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Connect the output:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Sheets:&lt;/strong&gt; add the Google Sheets integration on the &lt;strong&gt;Integrations&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make / Zapier:&lt;/strong&gt; "Actor run finished" -&amp;gt; "Get dataset items" -&amp;gt; "Google Sheets: add row", or send a Slack / e-mail digest to your team.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The data is published by Arbetsförmedlingen under CC0 (public domain), so you may reuse it, commercially too. Attribution to Arbetsförmedlingen / JobTech Dev is appreciated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://apify.com/kadi_bence/sweden-jobs-scraper" rel="noopener noreferrer"&gt;Sweden Jobs Scraper - Platsbanken on Apify&lt;/a&gt;. Missing a field or filter? Open an issue on the &lt;strong&gt;Issues&lt;/strong&gt; tab.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>opendata</category>
      <category>automation</category>
      <category>career</category>
    </item>
    <item>
      <title>How to export job offers from the Arbeitsagentur Jobbörse to Excel</title>
      <dc:creator>Bence Kadi</dc:creator>
      <pubDate>Thu, 15 Oct 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/kadi_bence/how-to-export-job-offers-from-the-arbeitsagentur-jobborse-to-excel-1fe5</link>
      <guid>https://dev.to/kadi_bence/how-to-export-job-offers-from-the-arbeitsagentur-jobborse-to-excel-1fe5</guid>
      <description>&lt;p&gt;The &lt;strong&gt;Jobbörse&lt;/strong&gt; of the Bundesagentur für Arbeit (&lt;a href="https://www.arbeitsagentur.de/jobsuche/" rel="noopener noreferrer"&gt;arbeitsagentur.de/jobsuche&lt;/a&gt;) is Germany's largest job database, with over 1 million open positions. Many of them are from small and medium companies that never post on LinkedIn or StepStone.&lt;/p&gt;

&lt;p&gt;If you are a recruiter, a staffing agency, a researcher or you sell to German employers, you often want these offers in a spreadsheet: all "Elektroniker" jobs around Berlin, all apprenticeships in Munich, all home-office IT jobs from the last week. The website has no export button. The API behind the website uses German parameter names, and it changed recently (the old endpoint now answers 403).&lt;/p&gt;

&lt;p&gt;This guide shows how to get the offers into Excel with simple English input, without code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I built the tool used in this guide, the Germany Jobs Scraper on Apify.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Run the example
&lt;/h2&gt;

&lt;p&gt;Open &lt;a href="https://apify.com/kadi_bence/arbeitsagentur-jobs-scraper" rel="noopener noreferrer"&gt;Germany Jobs Scraper - Arbeitsagentur Jobbörse&lt;/a&gt; and click &lt;strong&gt;Try for free&lt;/strong&gt; (free Apify account needed). The prefilled 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;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Data Engineer"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Berlin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"radiusKm"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxResults"&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;Click &lt;strong&gt;Start&lt;/strong&gt;. It runs in about 10-15 seconds and costs about $0.04.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Enter your search
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keywords&lt;/strong&gt; (&lt;code&gt;keywords&lt;/code&gt;): one search per line, job titles or skills (&lt;code&gt;Elektroniker&lt;/code&gt;, &lt;code&gt;Pflegefachkraft&lt;/code&gt;, &lt;code&gt;Data Engineer&lt;/code&gt;). German terms usually find more offers. A job found by two keywords is saved once. Put only job words here, not the city.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Location and radius&lt;/strong&gt; (&lt;code&gt;location&lt;/code&gt;, &lt;code&gt;radiusKm&lt;/code&gt;): a city or postal code (&lt;code&gt;Berlin&lt;/code&gt;, &lt;code&gt;80331&lt;/code&gt;) and a radius in km (0-200). Leave the location empty for all of Germany.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Employer&lt;/strong&gt; (&lt;code&gt;employer&lt;/code&gt;): only jobs from this employer, written as shown on arbeitsagentur.de (for example &lt;code&gt;Deutsche Bahn AG&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Occupational field&lt;/strong&gt; (&lt;code&gt;occupationalField&lt;/code&gt;): the Jobbörse's Berufsfeld, for example &lt;code&gt;Informatik&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Max results&lt;/strong&gt; (&lt;code&gt;maxResults&lt;/code&gt;): a limit for the whole run. &lt;code&gt;0&lt;/code&gt; means no limit. If you leave keywords, location, employer and occupational field all empty, you search all of Germany (1M+ jobs), so set a limit.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Use the filters
&lt;/h2&gt;

&lt;p&gt;Most filters are the Jobbörse's own search filters, in English. Example: permanent full-time jobs for electronics technicians and mechatronics technicians around Berlin, published in the last 7 days, without temp agencies (Zeitarbeit):&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;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Elektroniker"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Mechatroniker"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Berlin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"radiusKm"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"workingTime"&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;"full_time"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"contractType"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"permanent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"publishedWithinDays"&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;"includeTemporaryAgencies"&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;"maxResults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000&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 filters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;offerType&lt;/code&gt;: &lt;code&gt;job&lt;/code&gt; (default), &lt;code&gt;apprenticeship&lt;/code&gt; (Ausbildung or dual study), &lt;code&gt;internship&lt;/code&gt; (Praktikum or trainee), &lt;code&gt;self_employment&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;workingTime&lt;/code&gt;: also &lt;code&gt;part_time&lt;/code&gt;, &lt;code&gt;shift_night_weekend&lt;/code&gt;, &lt;code&gt;minijob&lt;/code&gt; and &lt;code&gt;home_office&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;contractType&lt;/code&gt;: &lt;code&gt;any&lt;/code&gt; (default), &lt;code&gt;permanent&lt;/code&gt; or &lt;code&gt;temporary&lt;/code&gt; (fixed-term)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;includePrivateAgencies: false&lt;/code&gt; to hide private recruiters&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A note on &lt;code&gt;home_office&lt;/code&gt;: the Jobbörse API has no working home-office filter, so the tool checks each offer itself and keeps only offers that allow working from home. If you combine it with &lt;code&gt;full_time&lt;/code&gt;, you get full-time jobs that allow home office.&lt;/p&gt;

&lt;p&gt;Offers removed by a filter are not saved and not charged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Export
&lt;/h2&gt;

&lt;p&gt;Open the run's &lt;strong&gt;Output&lt;/strong&gt; tab and click &lt;strong&gt;Export&lt;/strong&gt; (Excel, CSV or JSON).&lt;/p&gt;

&lt;h2&gt;
  
  
  What the output looks like
&lt;/h2&gt;

&lt;p&gt;The column names are in English. Code values (contract, working time, offer type) stay as the Jobbörse sends them, for example &lt;code&gt;UNBEFRISTET&lt;/code&gt; (permanent) or &lt;code&gt;VOLLZEIT&lt;/code&gt; (full-time). One real row from a test run (2026-10-05):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;title&lt;/th&gt;
&lt;th&gt;employer&lt;/th&gt;
&lt;th&gt;city&lt;/th&gt;
&lt;th&gt;postalCode&lt;/th&gt;
&lt;th&gt;postedDate&lt;/th&gt;
&lt;th&gt;contractType&lt;/th&gt;
&lt;th&gt;homeOffice&lt;/th&gt;
&lt;th&gt;salaryMin&lt;/th&gt;
&lt;th&gt;salaryMax&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Senior Data Platform Engineer&lt;/td&gt;
&lt;td&gt;Smartly.io Solutions GmbH&lt;/td&gt;
&lt;td&gt;Berlin&lt;/td&gt;
&lt;td&gt;10117&lt;/td&gt;
&lt;td&gt;2026-09-16&lt;/td&gt;
&lt;td&gt;UNBEFRISTET&lt;/td&gt;
&lt;td&gt;false&lt;/td&gt;
&lt;td&gt;60000&lt;/td&gt;
&lt;td&gt;87000&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You also get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;occupation&lt;/code&gt;, &lt;code&gt;offerType&lt;/code&gt;, &lt;code&gt;workingTime&lt;/code&gt;, &lt;code&gt;startDate&lt;/code&gt;, &lt;code&gt;firstPublishedDate&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;all work &lt;code&gt;locations&lt;/code&gt;, &lt;code&gt;region&lt;/code&gt; (federal state), &lt;code&gt;latitude&lt;/code&gt; / &lt;code&gt;longitude&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;salaryCurrency&lt;/code&gt; and &lt;code&gt;salaryPeriod&lt;/code&gt; (&lt;code&gt;YEAR&lt;/code&gt;, &lt;code&gt;MONTH&lt;/code&gt;, &lt;code&gt;HOUR&lt;/code&gt;, ...), plus the original &lt;code&gt;salaryText&lt;/code&gt; when there is one&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;temporaryAgency&lt;/code&gt; and &lt;code&gt;privateAgency&lt;/code&gt; flags&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;url&lt;/code&gt;, &lt;code&gt;externalUrl&lt;/code&gt; and the full &lt;code&gt;description&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Salary comes from the employer's own salary range. If there is none, the tool looks for a range in the text. About 1 in 5 offers had a salary in the test run. Street addresses are left out, and e-mails and phone numbers are removed from descriptions by default.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;$0.75 per 1,000 jobs&lt;/strong&gt;, plus Apify's tiny per-run start fee ($0.00005). Platform compute is included.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;50 jobs (the example): about $0.04&lt;/li&gt;
&lt;li&gt;1,000 jobs: about $0.75&lt;/li&gt;
&lt;li&gt;10,000 jobs (for example one occupation in one federal state): about $7.50&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't pay for offers removed by your filters, for the same job found by a second keyword, or for jobs already seen in monitoring mode.&lt;/p&gt;

&lt;p&gt;Note: the Jobbörse returns at most about 10,000 results per search. For bigger exports, split by keyword or location (for example one run per federal state). The run log warns you when a search hits the limit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automation: only new offers every morning
&lt;/h2&gt;

&lt;p&gt;The tool has a monitoring mode. It remembers the jobs it already returned and outputs only new ones.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Turn on &lt;strong&gt;Only new jobs&lt;/strong&gt; (&lt;code&gt;onlyNewJobs: true&lt;/code&gt;). The first run returns all matching jobs and saves them as a baseline. Later runs return only jobs that were not listed before.&lt;/li&gt;
&lt;li&gt;Keep &lt;strong&gt;Max results&lt;/strong&gt; at &lt;code&gt;0&lt;/code&gt; or high enough, so one run catches all new offers.&lt;/li&gt;
&lt;li&gt;Save the input as a &lt;strong&gt;task&lt;/strong&gt; and add a daily &lt;strong&gt;Schedule&lt;/strong&gt; (for example 06:30) in Apify Console.&lt;/li&gt;
&lt;li&gt;Send the new rows on:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Sheets:&lt;/strong&gt; add the Google Sheets integration on the task's &lt;strong&gt;Integrations&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make / Zapier:&lt;/strong&gt; "Actor run finished" -&amp;gt; "Get dataset items" -&amp;gt; "Google Sheets: add row", or an e-mail / Slack message to your team.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The "already seen" list belongs to your exact input. If you change a keyword, the location or a filter, a new list starts. If you run two similar schedules (for example Berlin and Hamburg), give each one its own &lt;strong&gt;Monitor name&lt;/strong&gt; (&lt;code&gt;monitorName&lt;/code&gt;), for example &lt;code&gt;berlin-elektroniker&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Example input for a daily monitor:&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;"keywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Elektroniker"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"location"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Berlin"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"radiusKm"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyNewJobs"&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;"monitorName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"berlin-elektroniker"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxResults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&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;You pay only for new offers. A daily search with 30 new jobs costs about 2 cents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://apify.com/kadi_bence/arbeitsagentur-jobs-scraper" rel="noopener noreferrer"&gt;Germany Jobs Scraper on Apify&lt;/a&gt;. Something missing or broken? Open an issue on the &lt;strong&gt;Issues&lt;/strong&gt; tab.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>career</category>
      <category>automation</category>
      <category>germany</category>
    </item>
    <item>
      <title>How to monitor new EU public tenders in your sector every morning</title>
      <dc:creator>Bence Kadi</dc:creator>
      <pubDate>Tue, 13 Oct 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/kadi_bence/how-to-monitor-new-eu-public-tenders-in-your-sector-every-morning-40mb</link>
      <guid>https://dev.to/kadi_bence/how-to-monitor-new-eu-public-tenders-in-your-sector-every-morning-40mb</guid>
      <description>&lt;p&gt;Every working day about 1,000 new public procurement notices are published on &lt;strong&gt;TED (Tenders Electronic Daily)&lt;/strong&gt;, the EU's official procurement journal. If your company sells to the public sector (IT services, construction, medical equipment, consulting), some of these are your next contracts.&lt;/p&gt;

&lt;p&gt;The problem is finding them in time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the TED website is built for searching, not for a daily routine,&lt;/li&gt;
&lt;li&gt;you have to remember CPV codes and TED's query language,&lt;/li&gt;
&lt;li&gt;e-mail alerts are hard to share with a team or put into a CRM,&lt;/li&gt;
&lt;li&gt;and award results (who won, for how much) are hidden inside each notice.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This guide shows how to get a daily list of &lt;strong&gt;new&lt;/strong&gt; tenders in your countries and categories, in Google Sheets or Excel, without code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I built the tool used in this guide, the EU Public Tenders Scraper (TED) on Apify.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Run the example
&lt;/h2&gt;

&lt;p&gt;Open &lt;a href="https://apify.com/kadi_bence/ted-tenders-scraper" rel="noopener noreferrer"&gt;EU Public Tenders Scraper (TED)&lt;/a&gt; and click &lt;strong&gt;Try for free&lt;/strong&gt; (free Apify account needed). The prefilled example gets 20 contract notices from Germany from the last 7 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;"countries"&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;"DE"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"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;"contract_notice"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"publishedWithinDays"&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;"maxResults"&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;Click &lt;strong&gt;Start&lt;/strong&gt;. It finishes in a few seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Find your CPV codes
&lt;/h2&gt;

&lt;p&gt;CPV codes are the EU's categories for what is being bought. Some examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;72000000&lt;/code&gt; IT services: consulting, software development, Internet and support&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;48000000&lt;/code&gt; software packages and information systems&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;45000000&lt;/code&gt; construction work&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;33000000&lt;/code&gt; medical equipment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You only need the top code: sub-categories are included automatically (&lt;code&gt;72000000&lt;/code&gt; also returns &lt;code&gt;72100000&lt;/code&gt;, &lt;code&gt;72260000&lt;/code&gt; and so on). If you don't know your code, run a search with &lt;strong&gt;keywords&lt;/strong&gt; first (any EU language), look at the &lt;code&gt;mainCpv&lt;/code&gt; and &lt;code&gt;cpvCodes&lt;/code&gt; columns of the results, and copy the codes you see.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Set up your search
&lt;/h2&gt;

&lt;p&gt;Example: open IT tenders in Germany and Austria, published in the last 7 days, that you can still bid on, with an estimated value of at least 100,000:&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;"countries"&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;"DE"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AT"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"cpvCodes"&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;"72000000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"48000000"&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;"contract_notice"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"publishedWithinDays"&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;"deadlineAfter"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"today"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"minEstimatedValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxResults"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyNewNotices"&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="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;&lt;code&gt;deadlineAfter&lt;/code&gt; also accepts a date (&lt;code&gt;2026-11-01&lt;/code&gt;) or &lt;code&gt;+14 days&lt;/code&gt; (at least two weeks left to prepare).&lt;/p&gt;

&lt;p&gt;Careful with &lt;code&gt;minEstimatedValue&lt;/code&gt;: about half of the notices have no estimated value, because many buyers don't publish it. Those notices are excluded when you set a value filter. Leave the filter out if you don't want to miss them. The value is in the notice's own currency (most notices use EUR).&lt;/p&gt;

&lt;p&gt;Other filters: &lt;code&gt;maxEstimatedValue&lt;/code&gt;, &lt;code&gt;publishedFrom&lt;/code&gt; / &lt;code&gt;publishedTo&lt;/code&gt; for a fixed period, &lt;code&gt;nutsCodes&lt;/code&gt; for regions (&lt;code&gt;DE2&lt;/code&gt; = all of Bavaria), &lt;code&gt;buyerName&lt;/code&gt;, and &lt;code&gt;noticeTypes&lt;/code&gt; such as &lt;code&gt;contract_award&lt;/code&gt; or &lt;code&gt;prior_information&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Export
&lt;/h2&gt;

&lt;p&gt;Open the run's &lt;strong&gt;Output&lt;/strong&gt; tab and click &lt;strong&gt;Export&lt;/strong&gt; (Excel, CSV, JSON and more). The tab has three views: &lt;strong&gt;Notices&lt;/strong&gt; for daily review, &lt;strong&gt;Awards and winners&lt;/strong&gt; for competitor analysis, and &lt;strong&gt;Full details&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the output looks like
&lt;/h2&gt;

&lt;p&gt;One row per notice. Example from a real award notice (2026-10-05):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;publicationNumber&lt;/th&gt;
&lt;th&gt;title&lt;/th&gt;
&lt;th&gt;buyerName&lt;/th&gt;
&lt;th&gt;buyerCountry&lt;/th&gt;
&lt;th&gt;mainCpv&lt;/th&gt;
&lt;th&gt;estimatedValue&lt;/th&gt;
&lt;th&gt;awardedValue&lt;/th&gt;
&lt;th&gt;currency&lt;/th&gt;
&lt;th&gt;winners&lt;/th&gt;
&lt;th&gt;deadline&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;685614-2026&lt;/td&gt;
&lt;td&gt;Software for Manager Skill and Portfolio Analysis&lt;/td&gt;
&lt;td&gt;Fjärde AP-fonden&lt;/td&gt;
&lt;td&gt;SE&lt;/td&gt;
&lt;td&gt;72000000&lt;/td&gt;
&lt;td&gt;7500000&lt;/td&gt;
&lt;td&gt;6030000&lt;/td&gt;
&lt;td&gt;SEK&lt;/td&gt;
&lt;td&gt;SEI Global Services INC&lt;/td&gt;
&lt;td&gt;(empty: award notice)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;On contract notices, &lt;code&gt;deadline&lt;/code&gt; holds the tender deadline (filled for 97% of contract notices in a sample of 1,500). You also get &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;procedureType&lt;/code&gt;, &lt;code&gt;placeOfPerformanceNuts&lt;/code&gt;, &lt;code&gt;url&lt;/code&gt;, &lt;code&gt;pdfUrl&lt;/code&gt; and &lt;code&gt;xmlUrl&lt;/code&gt;. In monitoring mode, new notices are marked &lt;code&gt;isNew: true&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you publish the data, keep the attribution: "Source: TED - Tenders Electronic Daily, © European Union, &lt;a href="https://ted.europa.eu" rel="noopener noreferrer"&gt;https://ted.europa.eu&lt;/a&gt;".&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;$1.50 per 1,000 notices&lt;/strong&gt; ($0.0015 per notice), plus Apify's start fee of $0.00005 per run. Platform compute is included.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A daily alert with 50 new notices: about $0.08 per day, so about $1.65 per month with 22 working days.&lt;/li&gt;
&lt;li&gt;1,000 notices for a market analysis: about $1.50.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In monitoring mode, notices you already received are skipped and not charged. A search with no matches costs only the start fee. You can cap spending with &lt;strong&gt;Max results&lt;/strong&gt; or &lt;strong&gt;Max charge per run&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automation tip: tenders in your sheet before your first coffee
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Keep &lt;code&gt;onlyNewNotices: true&lt;/code&gt; and set a &lt;strong&gt;Monitor name&lt;/strong&gt; (&lt;code&gt;monitorName&lt;/code&gt;, for example &lt;code&gt;it-dach&lt;/code&gt;). Each run returns only notices this monitor has not returned before. Use a different monitor name for each saved search. Changing any filter also starts a new list.&lt;/li&gt;
&lt;li&gt;Save the input as a &lt;strong&gt;task&lt;/strong&gt; and create a &lt;strong&gt;Schedule&lt;/strong&gt; for every working day, for example 06:00.&lt;/li&gt;
&lt;li&gt;Connect the output:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Sheets:&lt;/strong&gt; add the Google Sheets integration on the &lt;strong&gt;Integrations&lt;/strong&gt; tab. Your team sees new tenders as new rows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make / Zapier / n8n:&lt;/strong&gt; "Actor run finished" -&amp;gt; "Get dataset items" -&amp;gt; "Google Sheets: add row", or create a deal in your CRM, or post each notice to a Slack channel with the deadline and the link.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://apify.com/kadi_bence/ted-tenders-scraper" rel="noopener noreferrer"&gt;EU Public Tenders Scraper (TED) on Apify&lt;/a&gt;. Questions or a missing field? Open an issue on the &lt;strong&gt;Issues&lt;/strong&gt; tab.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>opendata</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
    <item>
      <title>How to get all open jobs from a list of companies (Greenhouse, Lever, Ashby) in one spreadsheet</title>
      <dc:creator>Bence Kadi</dc:creator>
      <pubDate>Thu, 08 Oct 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/kadi_bence/how-to-get-all-open-jobs-from-a-list-of-companies-greenhouse-lever-ashby-in-one-spreadsheet-395i</link>
      <guid>https://dev.to/kadi_bence/how-to-get-all-open-jobs-from-a-list-of-companies-greenhouse-lever-ashby-in-one-spreadsheet-395i</guid>
      <description>&lt;p&gt;You have a list of companies: target accounts, a startup portfolio, or simply the places you want to work. You want one table with &lt;strong&gt;all their open jobs&lt;/strong&gt;: title, location, remote or not, department, date and salary.&lt;/p&gt;

&lt;p&gt;The problem: each company uses a different applicant tracking system (ATS). Stripe is on Greenhouse, Ramp is on Ashby, Spotify is on Lever, many European companies use Personio or Workable. Every board looks different, and none of them has an "Export to Excel" button. Copying by hand does not scale past five companies.&lt;/p&gt;

&lt;p&gt;This guide shows how to get all of it into one spreadsheet, with the same columns for every company, without code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I built the tool used in this guide, the Greenhouse, Lever &amp;amp; Ashby Jobs Scraper on Apify.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Run the example
&lt;/h2&gt;

&lt;p&gt;Open &lt;a href="https://apify.com/kadi_bence/ats-jobs-scraper" rel="noopener noreferrer"&gt;Greenhouse, Lever &amp;amp; Ashby Jobs Scraper&lt;/a&gt; and click &lt;strong&gt;Try for free&lt;/strong&gt; (free Apify account needed). The form is prefilled:&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;"companies"&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;"Stripe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ramp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hugging Face"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxJobsPerCompany"&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;Click &lt;strong&gt;Start&lt;/strong&gt;. It saves about 48 jobs, takes about 15 seconds and costs about $0.06. You don't need to know which ATS each company uses: the Actor checks Greenhouse, Lever (US and EU), Ashby, Workable, Recruitee and Personio for each name. If you know your companies use only some of them, select just those in &lt;strong&gt;Platforms to check&lt;/strong&gt; (&lt;code&gt;atsPlatforms&lt;/code&gt;); detection is faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Paste your own company list
&lt;/h2&gt;

&lt;p&gt;Put one company per line. You can mix names (&lt;code&gt;Stripe&lt;/code&gt;), websites (&lt;code&gt;ramp.com&lt;/code&gt;) and board URLs (&lt;code&gt;https://jobs.lever.co/spotify&lt;/code&gt;). You can paste hundreds of companies in one run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Max jobs per company&lt;/strong&gt; is a limit per company, not per run. The form starts at &lt;code&gt;20&lt;/code&gt; for a quick test. Set it to &lt;code&gt;0&lt;/code&gt; to get every open job (&lt;code&gt;0&lt;/code&gt; is also the default when you call the Actor through the API).&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Add filters (optional)
&lt;/h2&gt;

&lt;p&gt;Example: engineering and data jobs in London or remote, posted in the last 30 days, without internships or senior roles:&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;"companies"&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;"Stripe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ramp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Hugging Face"&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://jobs.lever.co/spotify"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"personio.com"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"titleIncludes"&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;"engineer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"titleExcludes"&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;"internship"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"senior"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"locations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"London"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Remote"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"postedWithinDays"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxJobsPerCompany"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&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;titleIncludes&lt;/code&gt; keeps a job if its title contains any of the words. &lt;code&gt;titleExcludes&lt;/code&gt; drops it if the title contains any of them. Both are simple, case-insensitive "contains" checks, so &lt;code&gt;intern&lt;/code&gt; would also drop "International". Use &lt;code&gt;internship&lt;/code&gt; instead.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;locations&lt;/code&gt; keeps a job if any of its locations contains one of the words as a whole word. &lt;code&gt;US&lt;/code&gt; matches "Remote - US" but not "Austin".&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;remoteOnly: true&lt;/code&gt; keeps only remote jobs. Hybrid jobs are not included.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;postedWithinDays&lt;/code&gt; keeps jobs posted in the last N days.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jobs removed by a filter are not saved, don't count toward the per-company limit and are not charged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Check which companies were found
&lt;/h2&gt;

&lt;p&gt;Open the &lt;strong&gt;RUN_SUMMARY&lt;/strong&gt; record in the run's key-value store. For each company it shows the ATS and board found, how many jobs were on the board, how many were saved and how many were skipped by filters. Companies without a board get a note such as "no job board found". A company is usually missing because it uses another system (Workday, SAP SuccessFactors, iCIMS or its own site). For Workday companies, use the separate &lt;a href="https://apify.com/kadi_bence/workday-jobs-scraper" rel="noopener noreferrer"&gt;Workday Jobs Scraper&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If a name is matched to the wrong company, check the &lt;code&gt;boardUrl&lt;/code&gt; column, or paste the exact board URL instead of the name.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Export
&lt;/h2&gt;

&lt;p&gt;Open the run's &lt;strong&gt;Output&lt;/strong&gt; tab and click &lt;strong&gt;Export&lt;/strong&gt;: Excel, CSV, JSON or HTML.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the output looks like
&lt;/h2&gt;

&lt;p&gt;Every platform returns the same columns. One real row from a test run (2026-10-05):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;title&lt;/th&gt;
&lt;th&gt;company&lt;/th&gt;
&lt;th&gt;ats&lt;/th&gt;
&lt;th&gt;locations&lt;/th&gt;
&lt;th&gt;workMode&lt;/th&gt;
&lt;th&gt;department&lt;/th&gt;
&lt;th&gt;salaryMin&lt;/th&gt;
&lt;th&gt;salaryMax&lt;/th&gt;
&lt;th&gt;salaryCurrency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Security Engineer, Cloud&lt;/td&gt;
&lt;td&gt;Ramp&lt;/td&gt;
&lt;td&gt;ashby&lt;/td&gt;
&lt;td&gt;New York, NY (HQ); Remote (Canada); Remote (US); Miami, FL&lt;/td&gt;
&lt;td&gt;hybrid&lt;/td&gt;
&lt;td&gt;Engineering&lt;/td&gt;
&lt;td&gt;211400&lt;/td&gt;
&lt;td&gt;290600&lt;/td&gt;
&lt;td&gt;USD&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Other columns include &lt;code&gt;location&lt;/code&gt;, &lt;code&gt;postedDate&lt;/code&gt;, &lt;code&gt;employmentType&lt;/code&gt;, &lt;code&gt;team&lt;/code&gt;, &lt;code&gt;country&lt;/code&gt;, &lt;code&gt;salaryPeriod&lt;/code&gt;, &lt;code&gt;salaryText&lt;/code&gt;, &lt;code&gt;url&lt;/code&gt;, &lt;code&gt;applyUrl&lt;/code&gt;, &lt;code&gt;boardUrl&lt;/code&gt; and &lt;code&gt;description&lt;/code&gt;. Salary comes from the ATS when it has a structured range (Ashby, Lever, Recruitee) or is parsed from ranges like "$120,000 - $150,000" in the description. Many companies don't publish pay, so expect empty salary cells. Fields a platform doesn't have are empty, so every row has the same columns.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;$1.25 per 1,000 jobs&lt;/strong&gt; saved ($0.00125 per job), plus Apify's per-run start fee of $0.00005. Platform compute is included.&lt;/p&gt;

&lt;p&gt;You don't pay for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;jobs removed by your filters,&lt;/li&gt;
&lt;li&gt;jobs already seen in "only new jobs" mode,&lt;/li&gt;
&lt;li&gt;companies where no job board was found.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The prefill test (3 companies, 20 jobs each, 48 jobs): about $0.06.&lt;/li&gt;
&lt;li&gt;700 jobs, for example all open jobs at Stripe: about $0.88.&lt;/li&gt;
&lt;li&gt;100 companies with 4,000 open jobs in total: 4,000 x $1.25 / 1,000 = &lt;strong&gt;$5.00&lt;/strong&gt; for the first full export.&lt;/li&gt;
&lt;li&gt;Daily monitoring with about 50 new jobs per day: 1,500 jobs a month, about $1.88 per month.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To cap spending, set &lt;strong&gt;Max charge per run&lt;/strong&gt; in the run options. The Actor stops at that limit and keeps what it saved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automation tip: a daily hiring-signal feed
&lt;/h2&gt;

&lt;p&gt;This is the setup sales teams use to spot companies that are hiring for roles that suggest they need a product (for example "Head of RevOps" or "Data Engineer"):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Paste your target-account list.&lt;/li&gt;
&lt;li&gt;Add words to &lt;strong&gt;Job title must contain&lt;/strong&gt; (&lt;code&gt;titleIncludes&lt;/code&gt;), for example &lt;code&gt;revops&lt;/code&gt;, &lt;code&gt;data engineer&lt;/code&gt;, &lt;code&gt;security&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set &lt;strong&gt;Max jobs per company&lt;/strong&gt; to &lt;code&gt;0&lt;/code&gt;, so the first run sees every open job.&lt;/li&gt;
&lt;li&gt;Turn on &lt;strong&gt;Only new jobs&lt;/strong&gt; (&lt;code&gt;onlyNewJobs: true&lt;/code&gt;). The first run returns all matching jobs and stores them as a baseline. Later runs return only jobs not seen before, marked &lt;code&gt;isNew: true&lt;/code&gt;, and you pay only for those.&lt;/li&gt;
&lt;li&gt;If you run several schedules on the same companies with different filters, give each one its own &lt;strong&gt;Monitor name&lt;/strong&gt; (&lt;code&gt;monitorName&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Save it as a &lt;strong&gt;task&lt;/strong&gt; and add a daily &lt;strong&gt;Schedule&lt;/strong&gt; in Apify Console.&lt;/li&gt;
&lt;li&gt;Connect the output: the Google Sheets integration on the &lt;strong&gt;Integrations&lt;/strong&gt; tab, or in Make / Zapier / n8n use "Actor run finished" -&amp;gt; "Get dataset items" -&amp;gt; "Google Sheets: add row" (or Slack, or your CRM).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each morning you get only the new postings at your accounts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://apify.com/kadi_bence/ats-jobs-scraper" rel="noopener noreferrer"&gt;Greenhouse, Lever &amp;amp; Ashby Jobs Scraper on Apify&lt;/a&gt;. If a company is matched wrongly or not found, open an issue on the &lt;strong&gt;Issues&lt;/strong&gt; tab with the company name.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>career</category>
      <category>automation</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How to export all Workday job postings of a company to Excel</title>
      <dc:creator>Bence Kadi</dc:creator>
      <pubDate>Mon, 05 Oct 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/kadi_bence/how-to-export-all-workday-job-postings-of-a-company-to-excel-5097</link>
      <guid>https://dev.to/kadi_bence/how-to-export-all-workday-job-postings-of-a-company-to-excel-5097</guid>
      <description>&lt;p&gt;Many large companies (NVIDIA, Salesforce, Intel and thousands more) publish their jobs on Workday career sites. You know the address: &lt;code&gt;something.wd5.myworkdayjobs.com&lt;/code&gt;. The site is fine for one person looking for one job. It is not fine if you need &lt;strong&gt;all&lt;/strong&gt; jobs of a company in a spreadsheet:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;there is no "Export" or "Download" button,&lt;/li&gt;
&lt;li&gt;the list says "Multiple Locations" instead of the real cities,&lt;/li&gt;
&lt;li&gt;dates say "Posted 30+ Days Ago" instead of a real date,&lt;/li&gt;
&lt;li&gt;and the site stops paging at about 2,000 results, so on big boards you never see everything.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recruiters, sales teams (hiring signals), job boards and job seekers with a list of target companies all hit this. This guide shows how to get every job into Excel or Google Sheets in a few minutes, without code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I built the tool used in this guide, the Workday Jobs Scraper on Apify.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Open the Actor and try the example
&lt;/h2&gt;

&lt;p&gt;Go to &lt;a href="https://apify.com/kadi_bence/workday-jobs-scraper" rel="noopener noreferrer"&gt;Workday Jobs Scraper&lt;/a&gt; and click &lt;strong&gt;Try for free&lt;/strong&gt; (you need a free Apify account). The form is already filled with a small test:&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;"companies"&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;"NVIDIA"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxJobsPerSite"&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;Click &lt;strong&gt;Start&lt;/strong&gt;. It finishes in about 20 seconds and costs about $0.05. Now you can see what the data looks like before you spend more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Add your companies
&lt;/h2&gt;

&lt;p&gt;Type company names or websites, one per line. You don't need the Workday URL: the Actor finds the company's Workday boards for you (subsidiaries included). If a company is not found, open its careers page, click through to the job list and paste that URL into &lt;strong&gt;Start URLs&lt;/strong&gt; instead.&lt;/p&gt;

&lt;p&gt;To get &lt;strong&gt;every&lt;/strong&gt; job, set &lt;strong&gt;Max jobs per site&lt;/strong&gt; to &lt;code&gt;0&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Filter (optional)
&lt;/h2&gt;

&lt;p&gt;You can narrow the results by job title, country and posting date. Filtered-out jobs are free: you only pay for the rows you keep. Example for "data engineer jobs in the US or Germany, posted in the last 7 days, no internships, at NVIDIA, Salesforce and Intel":&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;"companies"&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;"NVIDIA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"salesforce.com"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"startUrls"&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://intel.wd1.myworkdayjobs.com/External"&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;"titleIncludes"&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;"data engineer"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"titleExcludes"&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;"internship"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"countries"&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;"US"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Germany"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxJobsPerSite"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"postedWithinDays"&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="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;Countries can be names or ISO codes. A job with several locations is kept if any of them matches.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Download to Excel
&lt;/h2&gt;

&lt;p&gt;When the run is done, open the run's &lt;strong&gt;Output&lt;/strong&gt; (the dataset) and click &lt;strong&gt;Export&lt;/strong&gt;. Choose &lt;strong&gt;Excel&lt;/strong&gt; (or CSV / JSON). You get one row per job.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the output looks like
&lt;/h2&gt;

&lt;p&gt;A few of the columns (real values from a test run on 2026-10-05, shortened):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;title&lt;/th&gt;
&lt;th&gt;company&lt;/th&gt;
&lt;th&gt;locations&lt;/th&gt;
&lt;th&gt;workMode&lt;/th&gt;
&lt;th&gt;postedDate&lt;/th&gt;
&lt;th&gt;salaryMin&lt;/th&gt;
&lt;th&gt;salaryMax&lt;/th&gt;
&lt;th&gt;salaryCurrency&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Senior Full-Stack Software Engineer, Storage Management Platform - DGX Cloud&lt;/td&gt;
&lt;td&gt;NVIDIA&lt;/td&gt;
&lt;td&gt;US, CA, Santa Clara; US, Remote&lt;/td&gt;
&lt;td&gt;remote&lt;/td&gt;
&lt;td&gt;2026-10-04&lt;/td&gt;
&lt;td&gt;184000&lt;/td&gt;
&lt;td&gt;356500&lt;/td&gt;
&lt;td&gt;USD&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Other columns include &lt;code&gt;country&lt;/code&gt;, &lt;code&gt;countryCode&lt;/code&gt;, &lt;code&gt;timeType&lt;/code&gt;, &lt;code&gt;firstPostedDate&lt;/code&gt;, &lt;code&gt;jobId&lt;/code&gt; (the company's requisition ID), &lt;code&gt;url&lt;/code&gt; (the live job page) and the full &lt;code&gt;description&lt;/code&gt;. Salary is filled only when the posting shows a range; in my NVIDIA test, 42 of 50 jobs had one.&lt;/p&gt;

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

&lt;p&gt;The price is &lt;strong&gt;$0.90 per 1,000 jobs&lt;/strong&gt;, plus Apify's small per-run start fee. Platform compute is included.&lt;/p&gt;

&lt;p&gt;Example: you track 5 companies and together they have 6,000 open jobs. The first full export costs 6,000 x $0.90 / 1,000 = &lt;strong&gt;$5.40&lt;/strong&gt;. With monitoring mode on (see below), every later run charges only for new jobs. If 40 new jobs appear per day, that is about $0.04 per day.&lt;/p&gt;

&lt;p&gt;You can set &lt;strong&gt;Max charge per run&lt;/strong&gt; in the run options, and the Actor stops cleanly at that limit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automation tip: a daily sheet of new jobs
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Turn on &lt;strong&gt;Only new jobs&lt;/strong&gt; (&lt;code&gt;onlyNewJobs: true&lt;/code&gt;) and give the search a &lt;strong&gt;Monitor name&lt;/strong&gt; (for example &lt;code&gt;target-companies&lt;/code&gt;). The first run returns all matching jobs and remembers them; every later run returns only jobs it has not returned before. Use a different monitor name for each saved search.&lt;/li&gt;
&lt;li&gt;In Apify Console, click &lt;strong&gt;Save as a new task&lt;/strong&gt;, then create a &lt;strong&gt;Schedule&lt;/strong&gt; (for example every day at 07:00) for that task.&lt;/li&gt;
&lt;li&gt;Send the results somewhere useful:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Sheets:&lt;/strong&gt; on the task's &lt;strong&gt;Integrations&lt;/strong&gt; tab, add the Google Sheets integration and point it at your sheet, so every run appends its rows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make or Zapier:&lt;/strong&gt; trigger "Actor run finished", then "Get dataset items", then "Google Sheets: add row" or "Slack: send message".&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now every morning you have a list of new postings at your target companies, with real dates, locations and salaries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://apify.com/kadi_bence/workday-jobs-scraper" rel="noopener noreferrer"&gt;Workday Jobs Scraper on Apify&lt;/a&gt;. If a company is not found or a field is missing, open an issue on the Actor's &lt;strong&gt;Issues&lt;/strong&gt; tab. I read all of them.&lt;/p&gt;

</description>
      <category>webscraping</category>
      <category>career</category>
      <category>automation</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
