Notifications

How notifications work

Nibwright watches Upwork for you, so the notification is the product. This page covers what sends one, why they arrive in batches, and every piece of data a message carries.

What sends a notification

Four things, and nothing else. Nibwright never messages you to say it found nothing, and never messages you about a posting it decided to skip.

EventWhen it firesBatched?
Draft readyA proposal has been written for a matched posting and is waiting for your review.Yes
New matchA posting cleared every screen on a search set to Alert only. Nothing has been drafted and no credit has been spent.Yes
Out of creditsYour balance is too low to draft, so new matches are being skipped. Sent at most once an hour.No
Reconnect neededYour Upwork connection expired and polling has stopped. Sent at most once an hour.No

The last two are account alerts. They are never held back, because they are the messages that explain why everything else has gone quiet.

Why messages arrive in batches

A single poll can surface fifteen postings at once. Fifteen separate messages would be unreadable, so job notifications are collected and sent as one digest.

Two clocks decide when a batch is finished. Whichever comes first wins:

RuleValueWhy
Quiet period90 secondsNothing new has been added to the batch for this long, so it looks complete.
Ceiling10 minutesMeasured from the oldest waiting item. Stops a steady trickle from holding a digest open indefinitely.

The two clocks exist because the items arrive on different rhythms. Matches are written in one burst the moment a poll finishes, while the drafts for those same postings land one at a time over the following minutes as each is written. A single fixed delay would either cut the batch in half or make every notification late.

A worked example

A poll at 09:00 matches 15 postings and starts drafting. Drafts finish between 09:00 and 09:06. Nothing new arrives after 09:06, so at 09:07:30 one message goes out: 15 proposal drafts ready to review, listing the best 6 and counting the rest.

Each channel you have enabled receives that one message. Enabling three channels means three deliveries of the same digest, not three times the jobs.

What every message contains

Every channel carries the same facts. The presentation differs, the data does not. Up to 6 postings get a full card and anything beyond that becomes a count, ordered best first.

FieldWhat it isWhen it is missing
Job titleThe posting's title, exactly as the client wrote it.Never
BudgetAn hourly range or a fixed amount, e.g. $65-$90/hr.When the posting states no budget
Client countryWhere the client is posting from.When Upwork does not report it
Search nameWhich of your saved searches surfaced it.Never
Match score0.00 to 1.00, how well the posting fits your profile. Judged by Claude, with a keyword overlap fallback.Never
Opening lineThe first line of the drafted proposal, so you can judge it without opening anything.On an alert-only match, where nothing is drafted yet
Suggested bidWhat the draft proposes to bid.On an alert-only match
LinkStraight to the draft for review, or to the match if nothing is drafted yet.Never

Everything above is also on the posting's own page in the dashboard, in more detail: the full description, the whole drafted letter, why it matched, and the client's history. A notification is a summary built to be read on a lock screen, not a replacement for the record.

Reading the match score

Every notification carries a match score between 0.00 and 1.00. It is Claude reading the posting against your Upwork profile and the search that found it, and it is the only thing standing between a posting and a drafted proposal.

ScoreWhat it means
0.85 and aboveA strong fit. These are flagged in the message and sorted to the top, because they are where the next Connect should go.
0.50 to 0.84A real fit worth a proposal. Drafted normally, no special billing.
Under 0.50Not drafted, and never notified about. It still appears on your dashboard, marked skipped, with the score that got it there.

When Claude cannot be reached for a posting, the score falls back to a plain keyword and skill overlap ratio rather than blocking the run. That fallback is more conservative than Claude, so an outage makes a search quieter, never noisier.

A search whose runs keep scoring low is usually a filter problem rather than a market problem. The Activity page on each search shows every check it has run and what came of it, which is the fastest way to tell those two apart.

Choosing a channel

Speed is the whole point. A draft that sits unread for an hour is a draft that arrives after fifty other people have already applied.

ChannelTypical delayBest for
SlackSecondsIf you already live in Slack, or want a shared channel with a VA.
EmailSeconds to minutesA readable archive. Too slow on its own.

You can enable both. They are independent: one failing does not stop the other, and each is tried again on its own next time.

Delivery, failures and testing

A channel can be saved, switched on, and quietly undeliverable, which is the worst failure this product has because it looks exactly like a quiet market. So the Integrations page tracks two separate things: whether a channel is configured, and whether anything has ever actually reached it.

The Send a test button on each channel row pushes a real digest, built by the same renderer and pushed through the same sender as a live notification, to that one channel. The result is written back to the row:

What the row saysMeaning
Not tested yetSaved, but nothing has been sent through it.
Sending a test...Queued. Refresh in a few seconds.
Delivered {timestamp}A message reached this target. The channel works.
Last test failed: {error}The provider's own words, kept verbatim, because that text usually names the exact thing to fix.

Live notifications are sent once. There is no retry queue: a channel that was down when a digest went out does not receive that digest later. The postings themselves are never lost, they are on your dashboard either way.

How often to expect messages

Searches poll no more often than every 60 seconds, so that is the floor on how frequently a new batch can appear. In practice you should expect a handful of digests a day rather than a stream.

To make them rarer or busier, adjust these, in rough order of effect:

  • Max drafts per day on each search, which caps how many postings can be drafted, and therefore how many can be announced.
  • Poll interval, which sets how often a search looks. Longer intervals mean fewer, larger digests.
  • Keywords, skills and filters, which decide how much gets scored in the first place.
  • Alert only mode, which notifies you about matches without drafting or spending credits.

Turning a channel off with its toggle stops delivery to it immediately and keeps the saved destination, so you can switch it back on without setting it up again.