Turn procurement portal tenders into CRM deals each morning

Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.

Agentic Task
Anchor BrowserGoogle SheetsHubSpotSlackSalesOperationsResearch & MonitoringNotifications & AlertsLead Enrichment
PromptCreate

Every weekday at 7am, log into the procurement and tender portals I track and turn genuinely relevant new notices into CRM pipeline. The value here is filtering noise, not forwarding everything, so be strict.

Start in Google Sheets. Use Get Values to read my portal config tab. Each row describes one portal: its name, the login URL, the saved search terms to run there, and my qualifying rules, which include minimum contract value, target sectors, eligible regions, and the minimum days of runway I need between today and the submission deadline to actually put a bid together.

For each portal, work inside a saved Anchor Browser profile so the session stays authenticated behind the portal login. Reuse the stored profile named for that portal when one already exists. If a portal has no profile yet, start a browser session, let me sign in once through the live view, and use Create Profile to save that logged-in state under the portal's name so every later run goes straight in. Most of these portals have no public API and nothing useful without a login, so the persisted profile is what makes this workflow possible at all.

With the profile attached, use Perform Web Task on each portal to run that portal's saved search and pull every notice published since the last run. For each notice capture the tender reference number, the buying authority, the notice title, the contract value, the submission deadline, and a direct source link to the original notice.

Before scoring anything, read the log tab in the same Google Sheet and dedupe strictly on the portal's tender reference number. The same notice is often re-listed, amended, or republished as a correction, and the reference number is the only reliable identity. If a reference is already logged, skip it entirely and do not create a second deal.

Score what remains against my qualifying rules and drop everything that does not fit. Apply the runway rule as its own hard filter: if the submission deadline leaves less time than my minimum, drop the notice even when the value, sector, and region are a perfect match, because a tender I cannot physically respond to in time is not pipeline. When a notice is genuinely borderline rather than clearly out, keep it and say in the Slack summary why you were unsure.

For each qualifier, use HubSpot Create Deal. Put the notice title and buying authority in the deal name, set the amount to the contract value, and set the close date to the submission deadline so the pipeline reflects real bid urgency rather than a guess. Record the tender reference number and the source link on the deal so anyone can open the original notice in one click.

After a deal is created successfully, use Append Values to add a row to the Google Sheet log with the tender reference number, the portal it came from, the deal that was created, and the date it qualified. This is what stops the same notice creating a duplicate deal on a later run. Only append after the deal actually exists, so anything that failed gets retried on the next run instead of being silently marked as handled.

Finish with one Slack message using Send a Message. List the newly qualified tenders ranked by how soon they close, soonest first, each with the buyer, contract value, submission deadline, days remaining, and the source link. If nothing qualified, say so plainly and mention how many notices were reviewed and filtered out.

Most importantly, explicitly call out any portal where the login failed, the saved profile expired, or the search did not complete. Name those portals in their own clearly marked section, separate from the results, and state that their notices are missing from this run. Never let a broken portal be reported as zero new tenders, because a silent zero looks identical to a quiet day and that is exactly how teams miss bids.

Example output

New qualified tenders (3) | Friday 9 May 1. Managed IT Support Services 2026-2030 Leeds City Council | GBP 2.4M | Closes in 11 days (20 May) Ref LCC-2026-0417 | Find a Tender | View notice 2. Cyber Security Assurance Framework NHS Shared Business Services | GBP 850,000 | Closes in 18 days (27 May) Ref NHS-SBS-88213 | Atamis | View notice 3. Cloud Migration Delivery Partner Transport for Wales | GBP 1.1M | Closes in 24 days (2 Jun) Ref TFW-2026-0092 | Sell2Wales | View notice LOGIN FAILED: ProContract. The saved session expired and no search was run, so nothing above includes this portal. Re-authenticate before tomorrow's run. Filtered out: 14 notices below your GBP 250k minimum, outside your sectors and regions, or closing too soon to prepare a bid.

What does this prompt do?

  • Signs in to each procurement or tender portal you track using a saved browser session, so notices sitting behind a login are not missed
  • Runs your saved searches and collects every new notice with its reference number, buying authority, contract value, submission deadline, and a link to the original
  • Scores each notice against your own rules for minimum value, sector, region, and how many days you need to actually prepare a bid, then drops the ones that do not fit
  • Opens a deal in your CRM for each qualifier with the value as the amount and the deadline as the close date, logs the reference so it never duplicates, and posts one ranked summary to Slack

What do I need to use this?

  • The procurement or tender portals you monitor, and a working login for each one
  • A Google Sheet with one tab listing each portal, its saved search terms, and your qualifying rules, plus a second tab used as the log of tenders already seen
  • A HubSpot account for the deals to land in (Pipedrive or Salesforce work just as well)
  • A Slack workspace and the channel that should receive the morning summary
  • An Anchor Browser account, which provides the cloud browser that holds your signed-in portal sessions

How can I customize it?

  • Change the timing. 7am on weekdays suits most bid teams, but daily or twice daily works if your portals publish frequently
  • Tighten or loosen the qualifying rules per portal, including the minimum days of runway you need between the notice landing and the submission deadline
  • Choose which CRM pipeline and starting stage new tenders land in, and whether the summary goes to a bid team channel or straight to you as a direct message

FAQs

Will this work with portals that require a login?
Yes, that is the whole point. Most government and enterprise procurement portals have no public feed, so the cloud browser keeps a saved signed-in session for each portal and runs your searches behind the login exactly as you would. You sign in once per portal when setting it up, and the session is reused after that.
What stops the same tender creating a duplicate deal?
Every tender that qualifies has its reference number written to a log tab in your Google Sheet. On later runs anything already in that log is skipped, so notices that get re-listed, amended, or republished as a correction never create a second deal.
What happens if a portal login stops working?
The morning summary names that portal explicitly as a failure instead of quietly reporting zero new tenders. A silent zero looks identical to a quiet day, and that is how teams miss bids they would have won.
Do I have to use HubSpot?
No. HubSpot is the default here, but the same flow works with Pipedrive, Salesforce, or another supported CRM. Either way the deal gets the contract value as the amount, the submission deadline as the close date, and a link back to the original notice.
Will it flood my pipeline with irrelevant tenders?
No, filtering is the main job rather than forwarding. Each notice is scored against your minimum contract value, target sectors, eligible regions, and the time you realistically need to prepare a bid, and anything that does not fit is dropped before it ever reaches your CRM.

Related templates

Auto-fix your calendar when a flight slips, and flag what's at risk

When your flight moves, your calendar times get corrected automatically and you get a Slack note naming the meetings you're about to miss.

Google Calendar
AviationStack
Slack
Agentic Task
Trace phishing emails to the sending IP and report abuse

Every 15 minutes, forwarded phishing reports get traced back to the server that really sent them, with a verdict in Slack and the worst senders reported.

AbuseIPDB
Gmail
Slack
Agentic Task
Weekly Amazon S3 bucket security audit posted to Slack

Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.

Amazon S3
Slack Bot
Google Sheets
Agentic Task
Log Agorapulse social conversations to HubSpot contacts

Twice every weekday, the conversations from your social inbox land on the right HubSpot contact timelines, with a Slack recap for sales.

Agorapulse
HubSpot
Slack Bot
Agentic Task
Clean up HubSpot contacts from your Amazon SES suppression list

Every morning, find the addresses that hard bounced or filed a spam complaint, update the matching HubSpot contacts, and post a short Slack recap.

Amazon SES
HubSpot
Slack Bot
Agentic Task
Draft polite follow-ups for emails that never got a reply

Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.

Aurinko
Google Sheets
Slack Bot
Agentic Task

Stop trawling tender portals every morning.

Let the notices worth bidding on land in your pipeline with the deadline already set, and hear about them once, ranked by what closes first.