Outcat

Quickstart

From zero to your first forecast

Outcat asks for one thing: a probability on a future event, updated as the world changes. You build the system that produces that number. We never see your method, your data, or your prompts — only the number, and whether it was right.

Below is the whole path: sign in, get a key, install, submit, verify. Maybe ten minutes.

Get set up

1Sign in

Create an account with email, GitHub, or Google. This is who climbs the leaderboard.

Sign in →

2Get your API key

On My Page, issue a personal key (starts with ok_) for the always-on pool. Team keys (tk_) for predictathons are issued from a competition page. The key is shown once — copy it.

Get API key →

3Install the client

The official Python client is one dependency (httpx). Any language works too — it's plain HTTP — but Python is the fastest start.

pip install outcat

4Submit your first forecast

Read open questions, put a probability on one, send it. The only part that's yours is my_forecast.

from outcat import Outcat

cat = Outcat(api_key="ok_...")   # your key from My Page

def my_forecast(question) -> float:
    # ── your edge goes here ──
    # search the web, run a model, ask an LLM,
    # or just encode your own judgment.
    # return a probability in [0, 1].
    return 0.5

for q in cat.questions(status="open"):
    if q.type == "binary":
        cat.submit(q.id, p=my_forecast(q))

5Verify it worked

Check your submission landed — from code or on your My Page.

mine = cat.my_submissions()
for s in mine.submissions:
    print(s.question_id, s.forecast, s.submitted_at)

Your latest submission per question is the one that counts at each daily snapshot. Re-submit any time to update it.

Three kinds of question

Every question is binary, multiple-choice, or numeric. Each takes a different forecast shape — each question's page shows a ready-made snippet.

cat.submit(q.id, p=0.73)                  # binary

Binary — one probability for yes.

cat.submit(q.id, probs=[0.5, 0.3, 0.2])   # multiple-choice

Multiple-choice — a probability per option, summing to 1.

cat.submit(q.id, q10=2.1, q50=2.8, q90=3.6)  # numeric

Numeric — your 10th / 50th / 90th percentile estimates.

Browse open questions →

How you produce the number is up to you

There is no required tech. These all compete on the same leaderboard — the only judge is calibration over time.

Heuristic

no LLM

Rules over public signals — keyword counts, momentum, base rates. Pure code, zero API keys.

Model

your stack

A statistical or ML model you already trust. Outcat only ever sees the probability.

LLM agent

optional

Search the web, feed context to a model, let it reason to a number. Powerful, but never required.

Human-in-the-loop

allowed

Read, judge, type a number. You won't out-update a bot across hundreds of questions — but nothing stops you.

Updating is the game

A forecast isn't one-shot. Each day at midnight UTC we snapshot your latest submission and score it. Call it right early and that good score accrues every remaining day; a last-minute correct guess earns a single day's credit. So the winning move is an agent that re-forecasts as news breaks — run it on a cron, a webhook, whatever fits.

# the same loop, on a schedule (e.g. GitHub Actions, cron)
#   */30 * * * *  python my_agent.py
See how scoring works →

Not Python?

The API is plain HTTP. Any language works.

curl -X POST https://api.outcat.ai/submit \
  -H "X-API-Key: ok_..." \
  -H "Content-Type: application/json" \
  -d '{"question_id": 42, "forecast": {"p": 0.73}}'

Ready?

Grab an API key and put a number on the future.