# Using the API

## Scraping the Jobs

1. Sign up for [APIFY](https://www.apify.com?fpr=z4xeu0h0)
2. Get our [Upwork Auto Apply](https://apify.com/big-brain.io/upwork-application?fpr=z4xeu0h0) bot in the marketplace.&#x20;
3. Scrape Upwork jobs

{% hint style="info" %}
You must pass the job application URL to our API. To get this URL, we recommend using this [APIFY actor.](https://apify.com/jupri/upwork?fpr=z4xeu0h0) If you are not a developer, you can use our no-code tool [here](https://www.big-brain.co/product/upwork-auto-apply) and we'll handle scraping the jobs for you.&#x20;
{% endhint %}

4. Filter to remove less relevant jobs from the jobs scraper. You can filter based on keywords, previous spend on Upwork, budget, country, etc.

{% hint style="info" %}
Setting a minimum previous spend results in more relevant results.&#x20;
{% endhint %}

5. Convert the job URL to this format

```
https://www.upwork.com/ab/proposals/job/{Job_ID}/apply/#/
```

## Using the API

<mark style="color:green;">`POST`</mark>` ``https://api.apify.com/v2/acts/big-brain.io~upwork-application/runs?token={APIFY API Key}`

Apply to jobs on Upwork automatically.

**Headers**

| Name         | Value              |
| ------------ | ------------------ |
| Content-Type | `application/json` |

**Body**

<table><thead><tr><th>Name</th><th>Type</th><th>Description</th><th>Required</th></tr></thead><tbody><tr><td><code>username</code></td><td>string</td><td>Your Upwork login username</td><td>Yes</td></tr><tr><td><code>password</code></td><td>string</td><td>Your Upwork login password</td><td>Yes</td></tr><tr><td><code>startUrls</code></td><td>array</td><td>Application URL</td><td>Yes</td></tr><tr><td><code>coverLetter</code></td><td>string</td><td>The cover letter you will apply with.</td><td>Yes</td></tr><tr><td><code>defaultAnswer</code></td><td>string</td><td>How you will answer questions beyond the cover letter. Suggested, "Let's get on a call"</td><td>Yes</td></tr><tr><td><pre><code>proxyConfig
</code></pre></td><td>array</td><td>Use a static proxy</td><td>Yes, should be a static proxy</td></tr><tr><td><pre><code>useApifyProxy
</code></pre></td><td>boolean</td><td>Set to true</td><td>Yes</td></tr><tr><td><pre><code>apifyProxyGroup
</code></pre></td><td>string</td><td>Your proxy group from the <a href="https://console.apify.com/proxy/usage">APIFY proxy page</a>. </td><td>Yes</td></tr><tr><td><pre><code><strong>debugMode
</strong></code></pre></td><td>boolean</td><td>Set to true to receive extra insights into your run</td><td>No</td></tr><tr><td><pre><code><strong>testMode
</strong></code></pre></td><td>boolean</td><td>If set to true, it will go through all the actions but not apply. Set to false to apply.</td><td>No</td></tr><tr><td><pre><code>agency
</code></pre></td><td>string</td><td>The name of the agency profile you want to apply to. Leave empty if filling out the freelancer field.</td><td>Required if Freelancer is not set. If Freelancer is set, should be left blank.</td></tr><tr><td><pre><code>freelancer
</code></pre></td><td>string</td><td>The name of the freelancer profile you want to apply to. Leave empty if filling out the agency field.</td><td>Required if Agency is not set. If Agency is set, should be left blank.</td></tr><tr><td><pre><code>autoRefill
</code></pre></td><td>boolean</td><td>If set to true, the bot will buy more Upwork credits as needed with your payment method on file.</td><td>No</td></tr><tr><td><pre><code>autoRefillAmount
</code></pre></td><td>string</td><td>The amount of credits to auto refill. The possible values are <br><code>"10" "20" "40" "60" "80" "100" "150" "200" "250" "300"</code><br>Default is <code>"100"</code> </td><td>No</td></tr><tr><td><pre><code>ignoreDuplicateProposals
</code></pre></td><td>boolean</td><td>If set to false, an error will be created if you've already applied. If set to true, no error will be created if you already applied.</td><td>No</td></tr><tr><td><pre><code>boostProposal
</code></pre></td><td>boolean</td><td> Optionally, boost your proposal</td><td>No</td></tr><tr><td><pre><code>stepSize
</code></pre></td><td>integer</td><td>If boosting your proposal, the amount of credits you want to bid higher than the previous highest bid.</td><td>Required if <code>boostProposal</code> is set to true</td></tr><tr><td><pre><code>maxBid
</code></pre></td><td>integer</td><td>If boosting your proposal, the maximum amount of credits you want to bid.</td><td>Required if <code>boostProposal</code> is set to true</td></tr></tbody></table>

### Input Example

```
{
  "username": "example@gmail.com",
  "password": "Password123!",
  "startUrls": [
    {
      "url": "https://www.upwork.com/ab/proposals/job/~021894229602886060807/apply/",
      "method": "GET"
    }
  ],
  "coverLetter": "Hi, \n\nIt is great to connect with you! I am a lawyer with international experience in corporate commercial law, contracts, IP, and technology law. I have law degrees and specialization certificates in data privacy, and regulatory compliance. I have also worked with dozens of clients in multiple industries across multiple jurisdictions where I address various issues including but not limited to contractual obligations; IP rights; compliance policies; privacy policies, etc. \n\nCan you kindly provide more details about this project. I would be happy to jump on a call if that works for you. \n\nI look forward to your reply. \n\nThank you. \n\nRegards",
  "defaultAnswer": "Let's get on a call and I will answer all of your questions.",
  "securityQuestion": "Answer",
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "StaticUS3"
    ]
  },
  "debugMode": true,
  "testMode": false,
  "agency": "",
  "freelancer": "Example Contact",
  "autoRefill": true,
  "autoRefillAmount": "100",
  "ignoreDuplicateProposals": true,
  "stepSize": 1,
  "maxBid": 20,
  "boostProposal": true
}
```

{% hint style="info" %}
Use a Static Proxy. Do not use a Residential Proxy. You may need to message APIFY support to enable Static Proxies. You can also use custom proxies.&#x20;
{% endhint %}

## Notes

**Proxy Configuration**

Use a Static proxy - residential proxies do not work on this actor.

**Application URL**

Application URLs are different than job URLs. This actor uses Application URLS.\
\
Job URL - [https://www.upwork.com/jobs/\~{Job\_ID}](https://www.upwork.com/jobs/~%7BJob_ID%7D) - Do not use this type of URL. Extract the Job ID and turn it into the application URL.\
Application URL - [https://www.upwork.com/ab/proposals/job/\~{Job\_ID}/apply/#](https://www.upwork.com/ab/proposals/job/~%7BJob_ID%7D/apply/#) - This is the correct url to use. The Job ID always includes \~\
\
**Freelancer and Agency Parameters**

You must fill out either the freelancer or agency parameter - do not fill out both. This should be your name / agency exactly as it appears on Upwork.

**No-Code App**

This actor requires you to scrape jobs and pass the application URL that you gather externally as an input. Don't want to have to scrape jobs yourself? [Check out our no-code app](https://www.big-brain.co/product/upwork-auto-apply), and we'll handle the scraping for you, as well as native filtering for jobs, proxy configuration, scheduling, AI personalization in your cover letter, and Slack integrations to have the option to reject jobs before they are applied to.

## Get in Touch

### Book a Meeting

{% embed url="<https://savvycal.com/big-brain/upwork-auto-apply>" %}
Book a Meeting
{% endembed %}

### Get in Touch

Reach out to **<patrick@big-brain.co>** if you have any questions, want a demo, or to report a bug.&#x20;


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.big-brain.co/apps/upwork-auto-apply/using-the-api.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
