Skip to main content
Technical Guides

Competitive Signals: Tenders and Rival Tracking via Rodz

Peter Cools · · Updated on May 3, 2026 · 14 min read

In a nutshell: The Rodz API offers two 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 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 relative 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’s happening in the market 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. Those movements reveal familiarity with your market category and often indicate 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 matching your industry, the signal fires. Public tenders come with guaranteed budget and a defined timeline, which makes them some of the highest-intent signals you can act on.

Used together, these two signal types give you a clear picture of competitive dynamics and market opportunities. The rest of this guide walks you through configuring, testing, and combining them through the Rodz API.

Prerequisites

Before 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 haven’t 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’ll 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. That person arrives with knowledge of competing products, vendor evaluation experience, and possibly 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 doesn’t track every 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 a few distinct 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. That’s your window. A message that arrives within 48 hours of the hire date lands while they’re still setting up workflows and forming vendor opinions.

Churn prevention. If employees at your existing customers are leaving to join competitors, it could signal internal dissatisfaction or shifting priorities. Your customer success team should know immediately, not a month later when it shows up in a renewal conversation.

Account prioritization. Prospects with recent competitor-related employee movements deserve a higher rank in your pipeline. Familiarity with your market category shortens the education cycle considerably.

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’s 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.

Use Case: Competitive Displacement Outreach

A B2B software company selling project management tools wants to contact companies that just hired someone from a competing vendor. The configuration covers three competitors, filtered for director-level and above in operations and product departments.

When Marie Dupont joins Acme SAS as VP of Operations after five years at a competing vendor, the signal fires. The sales team receives a Slack notification via webhook, with Marie’s profile and Acme’s company details. The SDR sends a single personalized message referencing Marie’s background in the project management space and offers a comparison of features she might find relevant. The outreach goes out within 48 hours of her start date, while she’s still evaluating tools and forming opinions about her new stack.

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 matching 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 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 don’t 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’re published, not a week after they appeared on a platform you forgot to check.

Partner and channel activation. If you sell through resellers or integrators serving 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. That 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; 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. Your team gets everything needed to decide whether to bid and to start preparing a 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. Geography is set 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 gets the notification, reviews the tender requirements, and starts 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 relying on manual monitoring of procurement platforms might discover the same tender a week later, losing preparation time they won’t get back.

Combining Competitive Intelligence and Public Tenders

These two signal types get considerably more useful when run together. Here’s 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 may signal 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 work with.

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 that feeds itself as long as the data flows.

Frequently Asked Questions

How many competitors can I track with a single configuration?

There’s no hard limit on the number of competitors in a single competitor-relationships configuration. For clarity and maintainability, keeping each configuration focused on a specific competitive set, typically five to fifteen competitors, tends to work well. 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 don’t specify a seniority filter, the signal fires for employee movements at all levels, which can get noisy for large competitors with high turnover. Filter by seniority (director, VP, C-level) and by department to focus on movements that actually matter 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". A healthcare IT vendor, for instance, might filter exclusively for "public_health" authorities and ignore everything else.

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 doesn’t involve one of your prospect companies, the signal doesn’t fire. The competitor-relationships signal tracks movements between your prospects and your competitors, not movements among competitors themselves. If you want to monitor inter-competitor movements for strategic intelligence, 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. The webhook setup guide covers 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’re unlikely to hit this limit during normal usage. If you’re building an application that manages configurations for multiple clients, consider implementing request queuing. Full rate limit details are in the API reference.


The full Rodz API documentation covers every parameter referenced here. That’s the right place to start configuring your first competitive intelligence signals.

Share:

Detect your next customers automatically

100 free credits. No credit card.

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