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.
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
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?
What stops the same tender creating a duplicate deal?
What happens if a portal login stops working?
Do I have to use HubSpot?
Will it flood my pipeline with irrelevant tenders?
Related templates
When your flight moves, your calendar times get corrected automatically and you get a Slack note naming the meetings you're about to miss.
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.
Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.
Twice every weekday, the conversations from your social inbox land on the right HubSpot contact timelines, with a Slack recap for sales.
Every morning, find the addresses that hard bounced or filed a spam complaint, update the matching HubSpot contacts, and post a short Slack recap.
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.
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.