Datos Blog

Learn about business automation and operations

How to Get Notified of New Upwork Job Posts in Your Niche Within a Minute

One of the best ways to make money on Upwork is to be the first person to respond to any job posts in your niche.
In this post, I’ll show you how to get notified instantly every time something is posted in a niche that you’re familiar with so that you can get in there and be the first person to reply.

If you want, you can watch my video tutorial instead:

Build your search query

First, let’s build a really good search filter in Upwork.

Upwork search allows you to do some pretty incredible things. You can search for things only in the title by typing Title:(keyword). You can combine words with AND or OR for boolean logic. You can even add parentheses to build more complex queries like (Keyword 1 AND Keyword 2) OR (Keyword 2 AND Keyword 3).

You can also use NOT to exclude words and phrases that don’t match what you’re looking for.

Once you’ve built the perfect search query, you can limit by hourly rate/fixed price rate as fits your expectations. I often will turn off “US Only” because I care more about the pay than the location. You will get more low-priced competition outside of the US, of course.

Once you’ve got that query perfected, hit that “Save search” button and give it a name.

Now, go back to the main page, go to “My Feed”, scroll all the way over to the right and you will find your new search.

Click on it and you’ll see these three dots where you can grab an RSS feed URL.

Use the RSS feed to create a notification automation

You can do the next part with a variety of workflow automation tools. I’ll show you how in Zapier and N8N (a powerful open-source alternative to Zapier that you can have running for $5/mo).

Automating it with Zapier

Zapier makes this pretty simple.

Create a new Zap and use the “RSS by Zapier” app as your trigger.

Add in the URL from Upwork and choose the default option for how to determine if the item in the feed is new.

Then, add your preferred notification destination such as email or slack.

Automating it with n8n

n8n is great if you want to save money, or if you want to set up a more complex workflow. For example, you could set up an automation that will only send you a notification after 2-3 jobs have accumulated. While Zapier’s RSS feed is limited to one at a time, n8n will grab the whole thing and allow you to do whatever you want with it.

The downside of this power and flexibility is that it also requires more setup to get it to do precisely what you want.

But since n8n is open-source, you can run it for “free”, provided you have a server. Here’s a tutorial for getting it set up and running within 30 minutes on a $5/mo DigitalOcean account.

You can copy/paste my n8n workflow into your n8n instance using this json code:

{
  "nodes": [
    {
      "parameters": {
        "url": "https://www.upwork.com/ab/feed/topics/rss?securityToken=fa6beb191a70950be395dcff0bbf708197fd50173b4b1b4e0ccf502b1806193bd8fd1201014e8576f563478bad7027420db8ad74b3cacb49001b1ccb6d1d4249&userUid=1289314160137519104&orgUid=1289314160141713408&sort=local_jobs_on_top&topic=5367452"
      },
      "name": "n8n jobs",
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1,
      "position": [
        670,
        300
      ]
    },
    {
      "parameters": {
        "functionCode": "const staticData = this.getWorkflowStaticData('global');\n\nlatestRead = staticData.latestRead;\n\nfor (let item of items) {\n  item.json.latestRead = latestRead || '1970-01-01';\n}\n\nreturn items;"
      },
      "name": "Latest Read1",
      "type": "n8n-nodes-base.function",
      "typeVersion": 1,
      "position": [
        870,
        300
      ]
    },
    {
      "parameters": {
        "functionCode": "const staticData = this.getWorkflowStaticData('global');\n\nif (items.length > 0) {\n  staticData.latestRead = items[0].json.isoDate || staticData.latestRead;\n}\n\n\nreturn items;"
      },
      "name": "Write Latest Read1",
      "type": "n8n-nodes-base.function",
      "typeVersion": 1,
      "position": [
        1290,
        120
      ]
    },
    {
      "parameters": {
        "conditions": {
          "number": [
            {
              "value1": "={{new Date($node[\"Latest Read1\"].data[\"latestRead\"]).getTime()}}",
              "value2": "={{new Date($node[\"n8n jobs\"].data[\"isoDate\"]).getTime()}}"
            }
          ]
        }
      },
      "name": "IF",
      "type": "n8n-nodes-base.if",
      "typeVersion": 1,
      "position": [
        1070,
        300
      ]
    },
    {
      "parameters": {
        "channel": "upwork",
        "text": "=*New n8n Upwork Job Post: {{$node[\"n8n jobs\"].json[\"title\"]}}*\n\n{{$node[\"n8n jobs\"].json[\"contentSnippet\"]}}\n\n*Link:* {{$node[\"n8n jobs\"].json[\"link\"]}}",
        "attachments": [],
        "otherOptions": {
          "unfurl_links": false
        }
      },
      "name": "Slack1",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 1,
      "position": [
        1290,
        350
      ],
      "credentials": {
        "slackApi": "Bot access token"
      }
    },
    {
      "parameters": {
        "triggerTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        }
      },
      "name": "Cron",
      "type": "n8n-nodes-base.cron",
      "typeVersion": 1,
      "position": [
        480,
        300
      ]
    }
  ],
  "connections": {
    "n8n jobs": {
      "main": [
        [
          {
            "node": "Latest Read1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Latest Read1": {
      "main": [
        [
          {
            "node": "IF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF": {
      "main": [
        [
          {
            "node": "Write Latest Read1",
            "type": "main",
            "index": 0
          },
          {
            "node": "Slack1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Cron": {
      "main": [
        [
          {
            "node": "n8n jobs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

You’ll just need to add your Slack authentication, edit the RSS feed URL, and you’re good to go! The first time this runs, it’ll pull every item from the RSS feed. The next time it runs, it’ll only pull new stuff.

This workflow takes advantage of a feature of n8n called “Static Data”. Static data is data that’s stored between workflow runs. That’s right—you can access information you’ve saved from a previous run. In this case, we’re checking what was the last time this workflow found a new item in the RSS feed and updating that date every time there’s another successful run.

I hope this helps you get more Upwork jobs!

Skip forward

Never miss a post from Datos