Nibwright watches Upwork through its official API and drafts a proposal that names the client's problem the moment a job matches. You paste and press Submit. Upwork has no API for that last step, so it is the only step left.
No card needed · about 10 free drafts · then $14.99/mo. Pricing
Next.js + Node dashboard for a logistics SaaS
$45–70/hr · United States · posted 41s ago
Draft · opening line
Copy letterYour shipment table timing out at 40k rows is almost always an unindexed aggregation, not React.
60s
polling interval
Every new posting is scored within a minute of going up.
38s
median draft
From matched to a finished letter waiting for you.
0
passwords, ever
OAuth only. Your Upwork login never reaches us.
1 click
to revoke
From Upwork's own settings, or from ours.
How it works
The interesting part is where the fourth one sits. Everything up to the finished letter is machine work; the submit is yours, and it is yours by design rather than by omission.
every 60 seconds
We poll Upwork's official API on your behalf and score every new posting against your saved search.
before any credit
Client spend, hire count, payment verification and your own exclude list all run before a single credit is spent on writing anything.
median 38 seconds
Claude writes a diagnosis-first letter from the posting and your synced profile — the draft you review, not a template with your name in it.
your hand, your account
One click copies the letter and opens the posting. Upwork publishes no submit API, so no honest tool can do this part for you.
Where the automation runs
Upwork's policy team names four kinds of tooling it acts on: feed scrapers, auto-refreshers, macro recorders and userscript managers. All four have one thing in common — they operate your account. Here is every place Nibwright touches, and where it stops.
Upwork's official API
GraphQL · read-only
Polled every 60 seconds with the OAuth token you granted, and can revoke.
Nibwright's servers
match → screen → draft
Scoring, client screening and the letter itself. Runs while your laptop is shut.
Your dashboard
ready to review
The draft waits beside the posting, the client's numbers and the Connects it will cost.
Upwork's real apply form
One click copies the letter and opens the posting. You paste it, set your bid, and press Submit yourself — on Upwork, signed in as you.
no write scope exists
nothing to revoke but the read
What the other shape looks like: an extension or an agency seat driving a logged-in session, so the submit happens from your account while you are not at the keyboard. That is the arrangement Upwork's automation policy is written about, and it is the one thing this diagram has no box for.
What a draft looks like
This is a real draft for the posting in the hero, with the reasoning behind each paragraph written out beside it. Every proposal the product writes is built to this shape.
Draft · Next.js + Node dashboard for a logistics SaaS
Your shipment table timing out at 40k rows is almost always an unindexed aggregation, not React. The render is fast; the query behind it is not.
I rebuilt a 3PL tracking dashboard last year with the same symptom — 4.1s p95 on the shipments view, down to 280ms after three covering indexes and moving the status rollup out of the request path.
First week, concretely: EXPLAIN ANALYZE on your three slowest endpoints, a before-and-after trace you can read yourself, and a written call on whether that rollup belongs in Postgres or in the app.
I overlap your mornings from GMT+5:45, and I am happy to start on the audit alone if you would rather see the work before agreeing the scope.
10 credits · drafted in 38s · Upwork quotes 6 Connects
Redrafting the same match is free.
The first two lines are everything a client reads on a phone between meetings. They get a specific, falsifiable guess about their problem — the thing only someone who has met the problem before would say.
The proof comes out of your synced Upwork work history. If your profile does not support a claim, the draft does not make it: a fabricated credential is worse than a thin proposal, and it is the one mistake you cannot walk back.
Named deliverables with a shape and an end, rather than "I would love to learn more about your project." It gives the client something to agree to in one reply.
Timezone, availability and how you like to start come from your profile and the saved search that matched. You edit anything you want before sending — nothing here is locked.
Connects are an ad budget
Connects cost $0.15 each and a single application runs 6 to 16 of them, more if you boost. Sends are easy to count and tell you nothing. Nibwright tracks what each search costs you per reply, reconciled against what actually happened on Upwork.
Which is usually how a search gets retired: not because it stopped matching, but because its cost per reply quietly doubled while its volume looked healthy.
See the analytics view| Saved search | Reply rate | Cost per reply |
|---|---|---|
| MERN, hourly $45+22 sent this month | $4.85 | |
| React Native / Expo, fixed ≥ $3k16 sent this month | $8.03 | |
| Node API rescue jobs28 sent this month | $16.05 |
What you get
Both plans include everything below. The annual plan is the same product at a lower monthly price with a larger credit allotment — never a feature gate.
Keyword, category, budget floor, client country, hourly or fixed. Run one search hourly and another twice a day; pause either without losing its history.
How searches workTotal client spend, hires, payment verification, average rate paid and your own exclude list. A posting that fails the screen never costs you a credit or a Connect.
A draft is ready within a couple of minutes of the job going up, and the alert arrives where you already are — batched on purpose, so a busy search is one message rather than nine.
Notification setupEvery poll, every match, every skip and the reason for it. When a search goes quiet you can see whether nothing matched or nothing was posted.
Reply rates checked back against what actually happened on Upwork, not against what you remembered to mark as sent. Per search, per month, per dollar of Connects.
The OAuth grant carries no write scope, so there is no submit endpoint for anyone to misuse. Disconnect from our integrations page or from Upwork's own settings.
What we ask forThe people this was built for. A saved search per stack, screened clients, and a letter that opens on the client's actual bug instead of your résumé.
Run a search per service line and read the cost per reply for each. The account stays yours: no shared logins, no agency seat submitting on anyone's behalf.
Screening matters most when every Connect is scarce. Client spend, hire count and payment verification do not care how long your profile has existed.
Questions people ask first
More in the help centre — including your first draft, what a credit buys and the handful of things that go wrong.
$14.99/mo, or $12.49/mo annually
A drafted proposal costs 10 credits — 100 proposals a month on the monthly plan, 300 on annual, before you top up. Cancel whenever.