AUTOMATION
In short: An Apify actor called Upwork Extractor, tested on its 7-day free trial before its 30-dollar monthly price, pulls fresh Upwork job listings into n8n through a single HTTP request.
Manually refreshing Upwork search pages is a poor use of a consultant's time. In this tutorial, Ani Björkström, a tech consultant based in Stockholm, builds an n8n workflow that queries Upwork through Apify and writes the newest matching jobs into a Google Sheet, where each row links straight to the listing. Apify grants every user 5 dollars of free credit each month.
Any Upwork scraper from the Apify store can work, but avoid actors that ask for your session information, because handing that over is dangerous and your profile can be corrupted. The build here uses Upwork Extractor, chosen mainly because it offers a 7-day free trial before you decide whether it is worth 30 dollars a month. In the actor's settings you define the search keyword, in this case n8n, a result limit of five, because more rows consume more credits, and sorting by newest; options such as budget and hourly rate are also available.
The actor's JSON tab shows the same search configuration as code, and that code is pasted into an n8n HTTP request node with body content type set to JSON. The request URL comes from the actor's Integration section under API endpoints, using "run actor synchronously and get dataset items", which returns the job listings directly in the response.
| Form field in n8n | Apify JSON value | Example in this run |
|---|---|---|
| Job title | Search query | n8n |
| Limit | Number of rows returned | 5 (or 6 in the form test) |
| Sort | Sorting criteria | newest |
Because the values you change between runs should not require editing the workflow. One run might search n8n jobs, the next might search Make, the limit might jump from five to the newest 100 jobs, and the sort might switch from newest to relevant. Declaring keyword, limit, and sort as form fields means every execution starts with a small form where you type those three values and submit.
Submitting the form sends the values into the HTTP request, which calls the Apify endpoint and returns all matching jobs. Upwork returns many fields, but this workflow maps ID, published date, job URL, and description into Google Sheets; in the demonstration run with keyword n8n, limit five, and sort newest, the sheet fills with rows whose links open real listings, including one titled "n8n expert needed to fix WhatsApp AI agent workflow error". The template is offered free to viewers who like the video and comment "n8n".
Apify gives every account 5 dollars of free credit per month, and Upwork Extractor has a 7-day free trial before its 30-dollar monthly subscription. Keeping the result limit low, such as five rows, conserves credit.
Be careful with actors that request your session information. Sharing it can be dangerous and your Upwork profile can be corrupted, so choose an actor that works without it.
You can map as many returned fields as you like. This build keeps ID, published date, job URL, and description, since the URL opens the full listing.
Chapters: 0:00 Introduction and Workflow Execution · 0:13 Meet Your Instructor · 0:24 Setting Up APIFY for Upwork Scraping · 1:18 Configuring Search Criteria · 2:32 Using JSON in N8N HTTP Requests · 4:02 Form Submission and Variable Setup · 5:11 Testing and Executing the Workflow · 6:30 Mapping Data to Google Sheets · 7:32 Conclusion and Workflow Success
0:11 Hi, my name is Annie Berstrom. I'm a tech consultant based in Stockholm. And in this tutorial, I will show you how to use NAN to scrape information from Upwork. We will use Eify to achieve this task. If we go to Epifi, you can see that you get $5 free credit every single month. And from there, you can go to EPify store and search for agent or scraper that you want to use because [snorts] we will scrape up work. We will search for Upwork here. And you can see that there are different agents that you can use. You can just feel free to choose any of those. Be very careful that you are not giving your session information because that can be dangerous and your profile can be corrupted.
0:56 I will go with Upwork Extractor mainly because this is giving 7 days free trial and I will use this agent for 7 days and then after that I will decide if it's worth $30 for a month or not. So in here you can see that we have some type of search criteria. The first one is where we define which type of keyword we want to search in Upwork. I will be looking for N8 job. So that's why I will enter N. You can define what is the keyword for the job that you are trying to find. And then after that you have the limit which will specify how many rows or outputs you want to get back from Upwork.
1:41 In this case, it would be how many jobs I want to get back from any and five is fine for this because more rows you have, more credits you will use and I want to save my credit. So I will just decide on five. And then underneath that you have sorting. This is if you want the result to be sorted before it will be returned. And I want to sort it by newest because I want to get the latest jobs. And then if you go down there are other options as well. You can for example define a budget, hourly rate and so on. After that you can save it. You can see that I have already saved this information. So if you go to the next tab that is called JSON.
2:26 Here you can see exactly the same information that we had under manual tab. But under JSON you can see the codebased information and this is what we will need to use in our HTTP request in N8N. So you will just copy this information from here and then you will go back to your N8 template. And if we open HTTP request from there we can see that there is body content type. You should choose JSON and then specify body. We'll be using JSON. And from there you can see JSON. Then you can decide which are values that you will be changing every time you run this search. So for me it will be the limit.
3:12 Maybe next time when I try to scrape up work I want to get the newest 100 jobs then I want to in that case change five with 100. So that's why I will specify that as a variable. Then also when it come to the keywords right now I specified any time but maybe next time I want to search for make for example so that's why I will specify this one as a variable and then also the newest maybe next time I will define relevant as the sorting criteria. So those ones are the ones that I want to specify as variable and change every time I run my NAT workflow. And in order to do those I will create a form submission.
4:01 If I double click on this here you can see that what I will do I will specify all of those three values as variables. And by variables I mean that every single time when I run my NAN templates I need to enter those values for every single run via this form. So here I will specify then job title which is basically the query in Upwork. You can come here and just double check that one here. So this one and then if I go back again under that one we will just decide the limit again we will map this with value in upwork you can see that the limit one is corresponding to this and coming back to n here we also have the sort one and coming back to upwork we can see that the sort one is the newest year.
4:55 So those ones we will specify as variables in the form and let's try now to test this. If I do for example execute tab you can see that the form will be opened and here we can write whatever we like. For example, we can just write software engineer or whatever it is that we are trying to search but I will write n and then limit for me it can be six and then the sort I will write newest and let's just submit this form and we can see that as soon as we submit the form this information was saved in N8 and in the next step where we have our HTTP request it will be sent to Upworks API.
5:42 But before we send this to Upwork API, we need to know which URL from Upwork should we use. So if I go to our agent here, we can go to integration and under integration we will choose endpoints and you can see use API endpoints. From here you can see there are different types of aim points and we will use run actor synchronously and get data set items. When we do that we can see the response about all the jobs from Upwork. And in the next step what we want to do is that we want to map this information with Google sheet and we want to save this information into Google sheet.
6:31 You can map as many fields as you like. You can see that Upwork is returning a lot of different fields. But for me, what is important is ID and then publish at job URL and description because then with the job URL you can click on and read more about that. So I want to see the new is published jobs and description about the job. Now let's come out of this and we can try to execute this workflow. If we click on execute workflow here we can specify n and the limit will be five sort will be newest and we will click on submit button and then we can see that workflow is starting to execute.
7:20 We can basically just minimize this one and we have success. We can see that it first sent an HTTP request and then after that we can see that the information we got from Upwork via Opify was saved in Google sheet. So if we go to our Google sheet form in here we can see that we have results saved in this Google sheet and we also have the end points to different Upwork jobs. If we click on those end points, jobs will be opening. You can see 10 expert needed to fix WhatsApp by agent workflow error. Amazing. So the workflow is working and if you like to get this workflow for free, just like this video and comment n
Want this working inside your finance team?