# CFP Radar: Tech Conference Call for Papers Finder & AI Matcher (`messnomore/cfp-radar`) Actor

Find open tech conference calls for papers (CFP) by deadline, region, online/in-person and travel support, ranked by how well each CFP matches your talk abstracts.

- **URL**: https://apify.com/messnomore/cfp-radar.md
- **Developed by:** [Wong Xian Qi](https://apify.com/messnomore) (community)
- **Categories:** Developer tools, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.00 / 1,000 cfp results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does CFP Radar do?

**CFP Radar** finds **open calls for papers (CFPs)** and **calls for speakers** at tech conferences and meetups, and uses **AI to score how well each CFP fits your talk abstracts**. Paste one or more abstracts, pick regions and a deadline window, and get a ranked list of conferences you can still submit to, with the deadline, event dates, location, online/hybrid format, **speaker travel support**, topics and a one-line reason for every match.

CFPs come from public [Sessionize](https://sessionize.com) event pages and the open-source [confs.tech](https://confs.tech) conference list. The index is rebuilt **every day**, so closed CFPs drop out and new ones show up without you doing anything. Use it in Apify Console with no code, or as a **CFP API** from your own scripts.

### Why use CFP Radar?

Finding the right conference to speak at usually means opening dozens of CFP pages, checking deadlines in different time zones and hunting for the travel and accommodation policy. CFP Radar does that for you:

- 🎯 **AI talk matching**: each CFP gets a **0–100 match score** per abstract, and you see which of your abstracts fits best and why.
- ⏰ **Deadline filter**: only CFPs that are still open and close within your window. Deadlines without a time are treated as "anywhere on Earth", so nothing is hidden too early.
- 🌍 **Region and online filter**: Africa, Asia, Europe, North America, South America, Oceania, or online (hybrid events count as online).
- ✈️ **Travel support filter**: keep only CFPs whose organizers cover or reimburse at least part of speaker travel or hotel.
- 🏷️ **Topic filter**: AI, web, Rust, Kubernetes, security, .NET, data and more. Common aliases work ("LLM" = AI, "k8s" = Kubernetes).
- 🔁 **Deduplicated and merged**: the same event listed in several places shows up once.
- 🤖 **Apify platform features**: run it on a schedule (for example every Monday), get results by API, or send them to Slack, email, Google Sheets, Make or Zapier with [integrations](https://docs.apify.com/platform/integrations).

Who uses it: **conference speakers and developer advocates** planning their speaking season, **DevRel teams** tracking where to send their engineers, and **community organizers** who want a list of open CFPs in their region.

### What data does CFP Radar return?

Every result is one open CFP. The most useful fields:

| Field                  | Description                                                                          |
| ---------------------- | ------------------------------------------------------------------------------------ |
| `conference`           | Conference or event name                                                             |
| `cfpDeadline`          | CFP closing date (YYYY-MM-DD); `cfpDeadlineAt` has the exact UTC time when published |
| `daysLeft`             | Whole days left until the CFP closes                                                 |
| `eventDates`           | Event date, or "start to end" for multi-day events                                   |
| `location`             | "City, Country", "Online" or "Unknown"                                               |
| `online`               | `true` for online and hybrid events                                                  |
| `travelSupport`        | `yes`, `no` or `unknown` (the CFP page doesn't say)                                  |
| `travelSupportDetails` | What the organizers say about travel and accommodation                               |
| `topics`               | Topic tags, e.g. `ai`, `kubernetes`, `rust`                                          |
| `matchScore`           | 0–100 fit with your talk abstracts (or your topics)                                  |
| `matchReason`          | One-line reason for the score                                                        |
| `bestMatchingAbstract` | Number of your abstract that fits best (1 = first)                                   |
| `cfpUrl`               | Where to submit your talk                                                            |
| `source`               | Where the CFP was found (`sessionize` or `confs.tech`)                               |

Also included: `eventUrl`, `format` (in-person, online, hybrid), `eventType` (conference, meetup, workshop…), `region`, `country`, `city`, `cfpStatus`, `cfpOpensAt` and a short `summary` of what the CFP is looking for.

### How to find conference CFPs that match your talk

1. Click **Try for free** and open the **Input** tab.
2. Paste your **talk abstracts**, one per entry (up to 10). Leave them empty to search by topics only.
3. Optionally add **topics** such as `ai`, `web` or `kubernetes`.
4. Pick **regions** (choose **Online** for remote and hybrid events) and set **CFP deadline within (days)**.
5. Turn on **Only CFPs with travel support** if you need the organizer to help with travel.
6. Set **Maximum results** and click **Start**.
7. In about 15–30 seconds, open the **Output** tab: the best matches come first. Click `cfpUrl` to submit.

### How much does it cost to find CFPs?

CFP Radar uses **pay-per-event pricing**: you pay **$0.01 per CFP returned**, plus a start fee of $0.00005 per run. There is no charge for compute time.

- A run with 10 results costs about **$0.10**, and 30 results (the default) about **$0.30**.
- **Maximum results** is a hard cap, so you always know the most a run can cost. Apify also stops charging when your run reaches the maximum cost you set.
- If a run fails (for example, when the AI service is down), it returns no results and you pay no result fees.

Apify's free plan includes monthly platform credit, which is enough for many CFP Radar runs.

### Input

See the **Input** tab for every option. Example input:

```json
{
    "talkAbstracts": [
        "Async Rust in production: how we moved a high-throughput payment service from Go to Tokio, what broke, and the patterns that made it reliable.",
        "Building an internal developer platform on Kubernetes: golden paths, self-service environments and measuring developer experience."
    ],
    "topics": [],
    "regions": ["Europe", "online"],
    "deadlineWithinDays": 120,
    "requireTravelSupport": false,
    "maxResults": 10,
    "minMatchScore": 40,
    "sortBy": "matchScore"
}
```

- **Talk abstracts**: a title plus 2–5 sentences works best. Each abstract is scored on its own.
- **Minimum match score** (default 40) drops weak matches. It only applies when you give abstracts, so a run can return fewer results than **Maximum results** when only a few CFPs really fit.
- **Sort by**: with abstracts, the best matches are picked first and "Deadline" only changes their order.

### Output

You can download the dataset in various formats such as **JSON, HTML, CSV or Excel**, or view it as a table in the **Output** tab. Example results from the input above:

```json
[
    {
        "conference": "Cloud Native Valencia",
        "cfpDeadline": "2026-10-29",
        "daysLeft": 17,
        "eventDates": "2026-11-25",
        "location": "Valencia, Spain (hybrid)",
        "online": true,
        "travelSupport": "unknown",
        "topics": ["cloud", "kubernetes", "devops", "open-source", "community"],
        "matchScore": 97,
        "matchReason": "Abstract 2: fits Cloud Native Valencia's Kubernetes-in-action focus and cloud-native best practices.",
        "bestMatchingAbstract": 2,
        "cfpUrl": "https://sessionize.com/cloud-native-valencia-2026/",
        "source": "sessionize"
    },
    {
        "conference": "CodeBuzz 2027",
        "cfpDeadline": "2026-11-15",
        "daysLeft": 34,
        "eventDates": "2027-06-02",
        "location": "Leipzig, Germany",
        "online": false,
        "travelSupport": "unknown",
        "topics": ["ai", "architecture", "cloud", "devops", "security", "testing"],
        "matchScore": 86,
        "matchReason": "Abstract 2: Platform engineering and Kubernetes-based developer platforms fit CodeBuzz 2027's focus on system architecture, cloud technologies, and DevOps/Platform Engineering.",
        "bestMatchingAbstract": 2,
        "cfpUrl": "https://sessionize.com/codebuzz-2027/",
        "source": "sessionize"
    }
]
```

Each run also saves a `SUMMARY` record in its key-value store with the index date, how many CFPs passed your filters and how many were scored by AI.

### Use CFP Radar as an API

Call the Actor from any language with the [Apify API](https://docs.apify.com/api/v2). This request runs CFP Radar and returns the results in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/messnomore~cfp-radar/run-sync-get-dataset-items" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"topics": ["ai"], "regions": ["online"], "deadlineWithinDays": 30, "maxResults": 20}'
```

See the **API** tab for ready-made clients in JavaScript and Python. You can also run CFP Radar from AI assistants through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp).

### Tips for better CFP matches

- **Write abstracts the way you would submit them.** Specific technologies and audiences ("Kubernetes platform teams", "React accessibility") match better than one-word topics.
- **Combine topics and abstracts**: topics filter the list first, then the AI scores what is left.
- **Use a wide deadline window** (90–180 days) when planning a whole season; big conferences close their CFPs months ahead.
- **Schedule a weekly run** and connect an integration to get new CFPs by email or Slack.

### Related guides

- [Where can I find tech conferences with an open call for papers, including CFPs that cover speaker travel?](https://wong13977-oss.github.io/tech-conference-cfp-finder/)

### FAQ

#### How does the AI match score work?

CFP Radar first compares your abstracts with every CFP that passes your filters using text embeddings, then asks an AI model to judge the closest candidates. The model scores each abstract on its own, and the final score combines both steps. 90–100 means the CFP is about your subject, 70–89 a strong fit, and 40–69 a partial fit such as a broad developer conference. Without abstracts, the score is the share of your topics the CFP covers.

#### Which CFP sources are covered?

Public event pages on [Sessionize](https://sessionize.com), a widely used call-for-speakers platform, and the community-maintained [confs.tech](https://confs.tech) list, which also links CFPs hosted elsewhere. Sources are crawled politely once a day.

#### How fresh is the data?

The CFP index is rebuilt every day. Each run only returns CFPs that are open at the moment you run it, and drops events that are already over.

#### What does travel support "unknown" mean?

The CFP page doesn't say whether the organizers pay for travel or hotel. Many CFPs don't mention it, so "unknown" is common. It is worth asking the organizers. "yes" means the page says they cover or reimburse at least part of it; check `travelSupportDetails` for what exactly.

#### Why did I get fewer results than I asked for?

Your filters may leave only a few open CFPs, or the AI found only a few that fit your abstracts well. Lower **Minimum match score**, widen the deadline window or add regions. You only pay for results you get.

#### Are my talk abstracts stored or shared?

Your abstracts are sent to the OpenAI API only to compute the match, and CFP Radar doesn't write them to its logs. Like every Apify run, your input stays in your own run storage, which you can delete at any time.

#### Is it legal to collect CFP data?

CFP Radar only reads public conference listings and CFP pages, and it returns event information, not speaker data. Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

#### I found a wrong deadline or a missing conference. What can I do?

Open the **Issues** tab and tell us the conference and the CFP link. Feedback and feature requests are welcome there too.

# Actor input Schema

## `talkAbstracts` (type: `array`):

One abstract per entry (up to 10, 4,000 characters each). Each CFP gets a match score from 0 to 100 and a one-line reason. Leave empty to search by topics and filters only.

## `topics` (type: `array`):

Keep only CFPs about at least one of these topics, e.g. "ai", "web", "rust", "kubernetes", "security". Common names and abbreviations work ("LLM" counts as ai, "k8s" as kubernetes). Leave empty for all topics.

## `regions` (type: `array`):

Where the event takes place. "Online" also includes hybrid events you can join remotely. Leave empty for anywhere.

## `deadlineWithinDays` (type: `integer`):

Only CFPs that close within this many days from now. Closed CFPs are never returned.

## `requireTravelSupport` (type: `boolean`):

Keep only CFPs whose organizers cover or reimburse at least part of speaker travel or accommodation.

## `maxResults` (type: `integer`):

Upper limit on returned CFPs. You pay per returned CFP, so this also caps the cost of a run.

## `minMatchScore` (type: `integer`):

Drop CFPs whose AI match score is below this (0-100). 40 and up means at least a partial fit. Only applies when talk abstracts are given.

## `sortBy` (type: `string`):

Order of the results. With talk abstracts, the best matches are picked first and "Deadline" only changes their order. Without abstracts, "Deadline" lists the soonest-closing CFPs that pass your filters.

## Actor input object example

```json
{
  "talkAbstracts": [
    "Async Rust in production: how we moved a high-throughput payment service from Go to Tokio, what broke, and the patterns that made it reliable."
  ],
  "topics": [
    "rust",
    "backend"
  ],
  "regions": [],
  "deadlineWithinDays": 60,
  "requireTravelSupport": false,
  "maxResults": 30,
  "minMatchScore": 40,
  "sortBy": "matchScore"
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "talkAbstracts": [
        "Async Rust in production: how we moved a high-throughput payment service from Go to Tokio, what broke, and the patterns that made it reliable."
    ],
    "topics": [
        "rust",
        "backend"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("messnomore/cfp-radar").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "talkAbstracts": ["Async Rust in production: how we moved a high-throughput payment service from Go to Tokio, what broke, and the patterns that made it reliable."],
    "topics": [
        "rust",
        "backend",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("messnomore/cfp-radar").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "talkAbstracts": [
    "Async Rust in production: how we moved a high-throughput payment service from Go to Tokio, what broke, and the patterns that made it reliable."
  ],
  "topics": [
    "rust",
    "backend"
  ]
}' |
apify call messnomore/cfp-radar --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,messnomore/cfp-radar"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/KgrMhb0XMzUh59Obm/builds/FGBf0wLxgQdncf2B2/openapi.json
