Skip to main content
Technical Guides

Competitive Signals: Tenders and Rival Tracking via Rodz API

Peter Cools · · 14 min read

In a nutshell: The Rodz API offers two powerful signal types for competitive and market intelligence: competitor-relationships (tracks when prospects hire from or lose employees to your competitors) and public-tenders (detects government and institutional procurement opportunities matching your criteria). This guide covers both signals end to end, with configuration examples, cURL commands, webhook payloads, and strategies for combining them into a single competitive intelligence workflow.

What Are Competitive and Market Signals?

Competitive and market signals are business events that reveal where your prospects stand in relation to your competitors and where new budget is being allocated through public procurement. Unlike growth or financial signals that track internal company changes, these two signal types look outward. They tell you what is happening in the competitive landscape around a prospect and what contracts are up for grabs.

The competitor-relationships signal tracks employee movements between your target accounts and your competitors. When a prospect hires someone from a competing vendor, or when a key employee leaves a prospect to join a competitor, you get notified. These movements reveal familiarity with your market category and often signal openness to evaluating alternatives.

The public-tenders signal monitors government and institutional procurement publications. When a public entity publishes a request for proposals, a tender notice, or a framework agreement that matches your industry, the signal fires. Public tenders represent guaranteed budget with a defined timeline, making them some of the highest-intent signals available.

Together, these two signal types give you a complete picture of competitive dynamics and market opportunities. This guide walks you through configuring, testing, and combining them through the Rodz API.

Prerequisites

Before you start configuring these signals, make sure you have the following in place:

  1. A Rodz account with API access enabled. API access is available on all paid plans. Register at app.rodz.io if you have not done so already.
  2. Your API key, generated from the Rodz dashboard under Settings > API Keys. If you need help generating your key, follow the authentication and first request guide.
  3. cURL installed on your machine. macOS and Linux include it by default. On Windows, use Git Bash or WSL.
  4. A list of competitors you want to track. For the competitor-relationships signal, you will need to provide company identifiers (Rodz company IDs or domain names) for your competitors.
  5. Knowledge of your target procurement categories. For the public-tenders signal, you should know the CPV codes (Common Procurement Vocabulary) or keywords relevant to your offering.
  6. A webhook endpoint (optional but recommended). To receive real-time notifications, set up a webhook using the webhook setup guide.

Set your API key as an environment variable to keep the examples clean throughout this guide:

export RODZ_API_KEY="your_api_key_here"

Competitor Relationships Signal

What It Detects

The competitor-relationships signal monitors employee movements between your target accounts and a defined set of competitors. It fires in two scenarios:

  • Inbound from competitor. A prospect hires someone who previously worked at one of your competitors. This person arrives with knowledge of competing products, vendor evaluation experience, and potentially a preference for the category of solution you sell.
  • Outbound to competitor. An employee at a prospect company leaves to join one of your competitors. This can indicate dissatisfaction with existing solutions or a shift in the prospect’s strategic direction.

The signal does not just track any employee. You can filter by seniority level, department, and role keywords to focus on decision-makers and influencers who actually shape purchasing decisions.

When to Use It

This signal is most valuable in three situations:

  • Competitive displacement campaigns. When a prospect hires someone from a competitor, the new hire often brings an evaluation mindset. They know what the competitor offers and they may want to replicate that stack or find something better. This is your window.
  • Churn prevention. If employees at your existing customers are leaving to join competitors, it could be a sign of internal dissatisfaction or shifting priorities. Your customer success team should be aware immediately.
  • Account prioritization. Prospects with recent competitor-related employee movements should be ranked higher in your pipeline. The familiarity with your market category shortens the education cycle.

Configuration and cURL Example

To create a competitor-relationships signal configuration, send a POST request to the /signals/configurations endpoint. You need to specify your list of competitors and the filters for the employee movements you want to track.

curl -X POST https://api.rodz.io/v1/signals/configurations \
  -H "Authorization: Bearer $RODZ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "signal_type": "competitor-relationships",
    "name": "Competitor employee movements - France",
    "enabled": true,
    "filters": {
      "competitors": [
        { "domain": "competitor-one.com" },
        { "domain": "competitor-two.io" },
        { "company_id": "rodz_comp_9f8e7d6c" }
      ],
      "direction": "both",
      "seniority": ["director", "vp", "c-level"],
      "departments": ["sales", "marketing", "operations"],
      "prospect_countries": ["FR"],
      "prospect_employee_range": ["50-200", "200-500", "500-1000"]
    }
  }'

A few notes on the configuration:

  • The competitors array accepts either a domain (the company’s website domain) or a company_id (the Rodz internal identifier). You can mix both.
  • The direction field accepts "inbound" (hired from competitor), "outbound" (left to competitor), or "both".
  • The seniority filter ensures you only get notified about movements involving senior roles, not every intern or junior hire.
  • The prospect_countries and prospect_employee_range filters scope the signal to your ICP geography and company size.

For a complete list of available filter parameters, consult the API reference.

You can verify your configuration was created by listing all active configurations:

curl -X GET https://api.rodz.io/v1/signals/configurations \
  -H "Authorization: Bearer $RODZ_API_KEY" \
  -H "Content-Type: application/json"

Webhook Payload

When the signal fires, the webhook delivers a payload with full context about the employee movement. Here is what a typical competitor-relationships event looks like:

{
  "event_type": "signal.triggered",
  "signal_type": "competitor-relationships",
  "timestamp": "2026-03-07T09:14:22Z",
  "data": {
    "signal_id": "sig_cr_4a8b2c1d",
    "configuration_id": "cfg_7x9y3z",
    "direction": "inbound",
    "prospect": {
      "company_id": "rodz_comp_abc123",
      "name": "Acme SAS",
      "domain": "acme-corp.fr",
      "employee_count": 320,
      "industry": "Manufacturing",
      "country": "FR"
    },
    "person": {
      "full_name": "Marie Dupont",
      "new_title": "VP of Operations",
      "previous_title": "Director of Operations",
      "linkedin_url": "https://linkedin.com/in/marie-dupont",
      "seniority": "vp",
      "department": "operations"
    },
    "competitor": {
      "company_id": "rodz_comp_def456",
      "name": "Competitor One",
      "domain": "competitor-one.com"
    },
    "detected_at": "2026-03-07T08:30:00Z"
  }
}

The payload gives you everything you need to act: who moved, where they came from, their new role, and the full prospect company context. Your CRM integration or automation tool can parse this to create tasks, update deal records, or trigger outreach sequences.

Use Case: Competitive Displacement Outreach

A B2B software company selling project management tools wants to target companies that just hired someone from a competing vendor. They configure the signal with three competitors and filter for director-level and above in operations and product departments.

When Marie Dupont joins Acme SAS as VP of Operations after five years at Competitor One, the signal fires. The sales team receives a Slack notification (via webhook) with Marie’s profile and Acme’s company details. The SDR crafts a personalized message referencing Marie’s experience in the project management space and offers a comparison of features she might find relevant. The outreach lands within 48 hours of her start date, while she is still evaluating tools and setting up her new workflows.

Without this signal, the sales team would have discovered Marie’s move weeks or months later, if at all.

Public Tenders Signal

What It Detects

The public-tenders signal monitors government procurement platforms and institutional tender publications across multiple countries. It fires when a new tender is published that matches your configured criteria: industry codes, keywords, geographic regions, budget thresholds, and submission deadlines.

Public tenders include:

  • Open tenders published by government entities at local, regional, and national levels.
  • Framework agreements for multi-year procurement contracts.
  • Requests for proposals (RFPs) from public institutions, hospitals, universities, and state-owned enterprises.
  • Contract award notices, which reveal who won past tenders and at what price, useful for competitive analysis.

The signal aggregates publications from official platforms such as BOAMP (France), TED (EU-wide), and SAM.gov (United States), among others. You do not need to monitor each platform separately.

When to Use It

Public tenders are relevant in several scenarios:

  • Direct bidding. If your company sells to the public sector, this signal is your primary lead source. You get notified about new opportunities matching your offering as soon as they are published.
  • Partner and channel activation. If you sell through resellers or integrators who serve the public sector, sharing relevant tender alerts with them strengthens the partnership and increases your indirect pipeline.
  • Competitive analysis. Award notices reveal which competitors are winning public contracts, at what price, and in which regions. This intelligence feeds your positioning and pricing strategy.
  • Budget timing. Public procurement follows budget cycles. Tracking tenders helps you understand when specific sectors allocate budget and plan your outreach accordingly.

Configuration and cURL Example

To create a public-tenders signal configuration, send a POST request with the relevant filters:

curl -X POST https://api.rodz.io/v1/signals/configurations \
  -H "Authorization: Bearer $RODZ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "signal_type": "public-tenders",
    "name": "IT services tenders - France and Belgium",
    "enabled": true,
    "filters": {
      "keywords": ["cloud computing", "infrastructure IT", "cybersecurity"],
      "cpv_codes": ["72000000", "72200000", "72300000"],
      "countries": ["FR", "BE"],
      "min_budget": 50000,
      "max_budget": 5000000,
      "tender_types": ["open", "restricted", "framework"],
      "min_deadline_days": 7,
      "languages": ["fr", "en"]
    }
  }'

Key configuration parameters:

  • keywords filters tenders by terms appearing in the title or description. Use domain-specific terminology that matches how procurement officers describe your category.
  • cpv_codes are Common Procurement Vocabulary codes used across EU procurement. Code 72000000 covers IT services broadly, while 72200000 narrows to software programming and consultancy. You can combine broad and narrow codes.
  • countries scopes the signal to specific geographies. The API covers EU member states, the UK, Switzerland, Norway, and the United States.
  • min_budget and max_budget let you filter out tenders that are too small to be worth pursuing or too large for your capacity.
  • tender_types filters by procurement procedure. Open tenders have no pre-qualification step. Restricted tenders require a shortlisting phase. Framework agreements cover multi-year procurement needs.
  • min_deadline_days excludes tenders with submission deadlines that are too close to respond to effectively.

For the full list of supported parameters and CPV codes, see the API reference.

Webhook Payload

When a matching tender is published, the webhook delivers the following payload:

{
  "event_type": "signal.triggered",
  "signal_type": "public-tenders",
  "timestamp": "2026-03-07T06:45:10Z",
  "data": {
    "signal_id": "sig_pt_8e2f4a9b",
    "configuration_id": "cfg_3m7n1p",
    "tender": {
      "tender_id": "ted_2026_08234",
      "title": "Cloud Infrastructure Migration and Managed Services",
      "description": "The Ministry of Digital Affairs seeks a service provider for migrating legacy infrastructure to a cloud environment, including managed services for a 36-month period.",
      "source": "TED",
      "source_url": "https://ted.europa.eu/notice/2026-08234",
      "cpv_codes": ["72200000", "72300000"],
      "country": "FR",
      "region": "Ile-de-France",
      "language": "fr",
      "estimated_budget": 2400000,
      "currency": "EUR",
      "tender_type": "open",
      "published_at": "2026-03-06T12:00:00Z",
      "submission_deadline": "2026-04-15T16:00:00Z",
      "contracting_authority": {
        "name": "Ministry of Digital Affairs",
        "type": "national_government",
        "country": "FR"
      }
    },
    "detected_at": "2026-03-07T06:30:00Z"
  }
}

The payload includes the tender title, description, budget, deadline, source link, and contracting authority. This gives your team everything needed to decide whether to bid and to start preparing their response.

Use Case: IT Services Company Monitoring French Tenders

An IT consulting firm specializing in cloud migrations configures the public-tenders signal with keywords related to cloud infrastructure and CPV codes covering IT services. They set the geography to France and Belgium with a minimum budget of 50,000 euros.

A new tender appears from the French Ministry of Digital Affairs for a cloud infrastructure migration project worth 2.4 million euros. The signal fires within hours of publication. The business development team receives the notification, reviews the tender requirements, and begins assembling a response. Because they were notified on day one of the publication period, they have the full 40-day window to prepare a thorough submission.

Competitors who rely on manual monitoring of procurement platforms might discover the same tender a week later, losing valuable preparation time.

Combining Competitive Intelligence and Public Tenders

These two signal types become significantly more powerful when used together. Here is how to build a combined competitive intelligence workflow.

Layer 1: Understand Who Your Competitors Are Winning

Configure the public-tenders signal to include "tender_types": ["award"] alongside your regular filters. Award notices tell you which competitors won public contracts, the contract value, and the contracting authority. Over time, this builds a map of your competitors’ public sector presence.

Layer 2: Track Employee Flows in Won Accounts

When you identify that a competitor won a major public contract, add the contracting authority (or its key service providers) to your prospect tracking list. Then configure competitor-relationships to monitor employee movements between those entities and your competitors. If a key decision-maker at that institution later hires someone from a different competitor, it might signal an openness to switching vendors when the contract comes up for renewal.

Layer 3: Time Your Outreach to Contract Renewals

Public contracts have defined durations, typically two to four years. By tracking when a competitor won a contract, you can calculate the approximate renewal date. Six months before that renewal, ramp up your outreach to the contracting authority. If the competitor-relationships signal has fired in the interim, showing employee movements between the authority and competitors, you have additional context to personalize your approach.

Implementation with Webhooks

To run this workflow in practice, set up two webhook endpoints (or a single endpoint that routes based on signal_type) as described in the webhook setup guide. Your webhook handler should:

  1. Parse incoming events by signal_type.
  2. For public-tenders award notices, log the winner, contract value, and duration in your competitive intelligence database.
  3. For competitor-relationships events involving accounts in your competitive database, flag them for priority outreach.
  4. Trigger CRM updates, Slack notifications, or email sequences based on the combined context.

This layered approach turns two individual signals into a continuous competitive intelligence engine.

Frequently Asked Questions

How many competitors can I track with a single configuration?

There is no hard limit on the number of competitors in a single competitor-relationships configuration. However, for clarity and maintainability, we recommend keeping each configuration focused on a specific competitive set, typically five to fifteen competitors. If you operate in multiple market segments with different competitor sets, create separate configurations for each segment. This also makes it easier to analyze signal volume and conversion rates by competitive group.

Does the competitor-relationships signal track all employee levels by default?

No. If you do not specify a seniority filter, the signal will fire for employee movements at all levels, which can be noisy for large competitors with high turnover. We strongly recommend filtering by seniority (director, VP, C-level) and by department to focus on movements that are actually relevant to purchasing decisions. You can always broaden the filters later once you have a sense of the signal volume.

Which countries are covered by the public-tenders signal?

The public-tenders signal covers all EU member states through the TED (Tenders Electronic Daily) platform, as well as national platforms in France (BOAMP), the United Kingdom, Switzerland, Norway, and the United States (SAM.gov). Coverage is expanding regularly. Check the API reference for the latest list of supported countries and procurement platforms.

Can I filter tenders by contracting authority type?

Yes. The filters object supports a contracting_authority_types parameter that accepts values such as "national_government", "regional_authority", "local_authority", "public_health", "education", and "state_enterprise". This is useful if you only serve certain types of public entities. For example, a healthcare IT vendor might filter exclusively for "public_health" authorities.

How quickly are public tenders detected after publication?

The Rodz platform polls official procurement sources multiple times per day. In most cases, a newly published tender is detected and delivered within six to twelve hours of its official publication date. For high-priority sources like TED and BOAMP, detection is typically faster, often within two to four hours. The detected_at timestamp in the webhook payload tells you exactly when Rodz identified the tender.

What happens if an employee moves between two of my tracked competitors?

If the movement does not involve one of your prospect companies, the signal does not fire. The competitor-relationships signal is designed to track movements between your prospects and your competitors, not movements among competitors themselves. If you want to monitor inter-competitor movements for strategic intelligence purposes, you can add your competitors to a separate prospect list and create a dedicated configuration for that use case.

Can I test these signals without waiting for a real event?

Yes. The Rodz API provides a test endpoint that simulates signal events for any configured signal type. Send a POST request to /signals/configurations/{config_id}/test to receive a sample webhook payload at your registered endpoint. This is useful for verifying your webhook handler, CRM integration, and routing logic before real events start flowing. See the webhook setup guide for detailed testing instructions.

Are there rate limits specific to signal configuration endpoints?

Signal configuration endpoints follow the same rate limits as the rest of the Rodz API: 100 requests per minute per API key. Since signal configurations are typically set up once and updated infrequently, you are unlikely to hit this limit during normal usage. If you are building an application that manages configurations for multiple clients, consider implementing request queuing. Full rate limit details are available in the API reference.


Ready to start tracking competitive movements and public procurement opportunities? Explore the full Rodz API documentation and configure your first competitive intelligence signals today.

Share:

Generate your outbound strategy for free

Our AI analyzes your company and creates a complete playbook: ICP, personas, email templates, call scripts.

Generate my strategy