Automated lead generation and tender monitoring

AI & Machine Learning 224 USD
Job 1 of 31
Goal:
Create an autonomous lead generation system that daily scans the Prozorro registry for two categories of opportunities: concluded contracts (warm leads — organizations that are already purchasing relevant products) and active tenders (where proposals can be submitted). The final product is a structured CRM database in Airtable with complete contact information of the client, participants, and proposal prices.

Key Requirements:

Two parallel workflows: isolated processing of contracts (/contracts) and active tenders (/tenders?status=active.tendering)
Extended filtering: 5 CPV codes + 15 marker brands + minimum amount of 50,000 UAH
Cursor pagination with historical backfill: scanning Prozorro from 01.01.2025 without losing position between launches
Detailed CRM structure: contacts (EDRPOU, email, phone), auction participants with prices, links to the proposal registry
Deduplication at the Airtable level: preventing duplicate entries during continuous operation
Hybrid logic: closed tenders that pass the filter automatically enrich the lead database with participant data for future email campaigns
My Contribution:

The client trades energy equipment (batteries, UPS, solar panels) and spent hours daily on manual monitoring of Prozorro. The task was not just to "send tenders," but to build a sales-ready lead conveyor with a complete market breakdown.

Architectural decomposition: instead of one "thick" flow, I divided the system into two independent workflows — for contracts and active tenders. Each has its own cursor, launch schedule, and Airtable table. This allowed scaling sources without mutual blocking.

Cursor pagination with self-healing logic: Prozorro returns a wrapping cursor in the format {timestamp}.{seq}.{hash}. I implemented a protective layer that validates the cursor before use and automatically restores it from a valid date if the API returns an anomaly (for example, a reset to 2015). Without admin intervention.

Two-tier data enrichment: for leads, I created a cascade of HTTP requests — first the contract (buyer, supplier, amount), then the tender (participants, bids, proposal registry). A separate JavaScript node combines these streams and forms JSON with an array of participants (name, EDRPOU, email, initial + final bid), ready for integration with email campaigns.

Deduplication through Airtable Search: before each entry, the flow searches by contractID/tenderID, allowing the workflow to be safely restarted as many times as needed without creating duplicates.

Routing of closed tenders: tenders that ended before processing are not discarded — IF logic redirects them to the "Leads" table with a complete list of participants. This way, the client receives not only potential buying customers but also competitor suppliers for market analysis.

Result:

A functioning system that daily enriches the client's CRM without any human intervention:

2 data sources in one database: Airtable with two tables ("Leads" and "Active Tenders"), each with contacts, prices, documents, and links
Readiness for email marketing: structured data of participants (with emails and phones) can be directly sent to Mailchimp/SendPulse/own script
Saving 2-3 hours/day: instead of manual googling, the client immediately receives a table with 18 fields
Historical coverage: backfill from 01.01.2025 allowed the formation of a warm lead database over 16+ months even before launch
Stability 24/7: the system runs 4 times a day on schedule, with retry logic for API errors and self-recovery of the cursor
#n8n #Airtable #LeadGeneration #SalesAutomation #Prozorro #API #WorkflowAutomation #JavaScript #CRM #DataPipeline #BusinessAutomation #NoCode #B2B #LeadGeneration #Automation
Details
  • Added:
96

Freelancer

  • Projects 11
  • Rating 4.9
  • Rating 1 566
Register

If you have an account, log in

Indicators

  • Last visit: 4 days 13 hours ago