Recruiting & ATS · Integration
Upwork
Add Upwork to your product for your customers, and give your AI agents governed access to it.
Upwork is a marketplace, so the records worth integrating describe an engagement rather than an employee: a job posting, the proposals against it, the offer that follows and the contract the work is billed under. Access is OAuth 2.0 against a GraphQL endpoint, and the practical fact to design around is that the public API leans heavily to reads. You can search postings, look up profiles and contracts, read timesheet and billing records and subscribe to webhook events, but a proposal is submitted by a person on Upwork rather than by your integration. Building on what it genuinely offers, instead of assuming parity with an internal hiring system, is most of the work. fastn keeps each client account's OAuth tokens and follows the schema as it moves.
In your product
Embedded for your customers. Per-tenant auth, no per-customer code, maintained by fastn.
Let each customer connect their own Upwork account so the freelance engagements they already run show up beside the rest of the work in your product.
Read a job posting with the proposals against it so your product can rank or shortlist without anybody re-typing rates and skills.
Follow an offer through to an active contract, and keep your own engagement records in step as its state changes.
Pull timesheet and billing records per client account so freelance spend reconciles against the budgets your product already tracks.
For your AI agents
Governed, audited access for the agents you build, through the MCP server.
An agent compares the proposals on one posting by rate, history and skills, reading only the account that authorised it.
An agent reports hours logged and amounts billed against an active contract for the period somebody asks about.
An agent says plainly which actions the API does not offer, rather than reporting a proposal as submitted when Upwork never accepted one.
Example prompt
Which of our Upwork contracts are still active, and how many hours did each bill last month?
Set up Upwork in 4 steps
- 01Enable the Upwork connector in your fastn dashboard.
- 02Have each customer authorise their own Upwork account over OAuth, so calls run under their marketplace access rather than a shared key.
- 03Map the job posting, proposal, offer, contract and timesheet fields your product uses, then subscribe to the webhook events you want.
- 04Call it from your product and expose the same connection to your agents through the MCP gateway.
Why teams use the Upwork integration
What you get by embedding it with fastn instead of building it yourself.
- Ship an Upwork integration without building it. Your customers connect their own Upwork account inside your product and work their job requisitions, candidates and applications there, with no per-customer code on your side.
- Handle the part that actually costs time: candidate records are personal data with consent and retention rules attached. fastn owns the auth, token refresh, rate limits, pagination and breaking-change fixes, so an Upwork update is not your on-call problem.
- One integration serves your product and your agents. The same governed Upwork connection powers in-product features and gives AI agents scoped, audited access, so you keep hiring pipelines moving without manual re-entry without wiring it twice.
Used by these teams
Compare with
Works well with
Often used alongside
Tools the same teams tend to run next to Upwork, across other categories.
Upwork integration FAQ
How do I add an Upwork integration to my product?
Enable the Upwork connector in your fastn dashboard, then let each customer authenticate their own Upwork account. fastn handles the OAuth flow, token storage and refresh per tenant, so there is no Upwork client code in your app and no per-customer branch in your codebase. Setup is 4 steps.
Do my customers each connect their own Upwork account?
Yes. Every connection is scoped to the individual customer, so each authorises their own Upwork account and only ever sees their own job requisitions, candidates and applications. That per-tenant isolation is the point of an embedded integration: you support the long tail of customer setups without maintaining an integration per customer.
Can AI agents use this Upwork integration?
Yes. The same connection is exposed to your agents through the fastn MCP gateway, with permissions scoped per tenant and every call audited. An agent compares the proposals on one posting by rate, history and skills, reading only the account that authorised it.
Who maintains the Upwork integration?
fastn does. When Upwork changes an endpoint, deprecates a field or alters its auth, the fix lands in the connector rather than in your backlog, and your customers' connections keep working.
How is candidate data from Upwork handled?
Access is scoped per tenant and limited to the fields you map, credentials are encrypted, and every read and write is logged. That matters more here than in most systems, because candidate records are personal data that carry consent and retention obligations.
Can my product react when a candidate's status changes in Upwork?
Yes, through event triggers: a stage move where Upwork owns the pipeline, or a completed assessment, a returned report or a finished reference where it owns one step in it. Events are delivered per tenant and can be replayed after an outage, so a hiring team does not silently lose an update while your product was unreachable.
What can I build with the Upwork integration?
A common starting point: let each customer connect their own Upwork account so the freelance engagements they already run show up beside the rest of the work in your product. Teams also use it for the other use cases listed above, and expose it to agents for governed reads and writes.
How much does the Upwork integration cost?
It is included. Pricing is based on connected accounts, not on how many connectors you enable, so adding Upwork does not change your per-connector cost. You can start free with 3 connected accounts.
Add Upwork to your product
Start free with 3 connected accounts. No sales call required, and no per-customer integration code.