Live · UK regulatory signals

UK profit warnings,
structured and queryable

Every UK profit warning classified in real time. Severity, cause, company context — clean JSON, queryable by API. Built for quant funds, financial platforms, and developers.

2,847
Warnings classified
3yrs
Historical depth
97%
Classification accuracy
<3min
Avg. time to classify

From LSE announcement to structured JSON in under 3 minutes

LSE publishes ~350,000 announcements/year. Most are noise. Flare watches all of them, extracts the signal.

📡
Source
LSE RNS Feed
~350k announcements/year. Unstructured prose. No machine-readable content beyond headline category.
⚙️
Ingestion
CF Worker (5-min cron)
Polls announcements, filters to candidates (~30% of volume), queues new items for classification.
🤖
Classification
Claude API
LLM classifies: is it a warning? Severity, primary cause, summary. Structured JSON output with confidence score.
Delivery
REST API + Webhooks
Query historical data or receive real-time webhooks when a new warning is classified. Clean, versioned schema.

UK Profit Warnings

Updating live
Date Company Ticker Event type Severity Primary reason Summary Source
Loading live events...

The classification pipeline

Built on Cloudflare Workers, D1, and Queues. Cost to run: ~£30/month. Classification by Claude API at ~£0.004 per announcement.

01
Ingest: Scheduled Worker polls LSE
Every 5 minutes during market hours. Fetches announcement index, deduplicates against D1, queues new items.
Worker cron: */5 9-18 * * 1-5
→ fetch announcements index
→ filter already-seen RNS IDs
→ push to CF Queue
02
Filter: Pre-screen announcement categories
Only Trading Updates, Business Conditions, Interim Statements sent to Claude. Reduces API cost by ~70%.
categories = [
"Trading Update",
"Business/Trading Conditions",
"Interim Management Statement"
]
03
Classify: Claude API call
Full announcement text sent with classification prompt. Returns structured JSON: is_warning, severity, reason, summary, confidence score.
~900 tokens per announcement
~£0.004 per call
Confidence threshold: 0.85
Low confidence → manual review queue
04
Store: Write to D1 + fire webhooks
Classified event written to D1. If is_warning=true and confidence>0.85, webhook fired to all subscribed customers in real time.
INSERT INTO warnings (...)
→ notify webhook subscribers
→ update search index
→ log to analytics

Clean JSON. Versioned. Predictable.

Authenticate with your API key in the header. All responses are JSON. Rate limits depend on your tier.

GET /v1/warnings GET
// Request
GET /v1/warnings
  ?from=2025-01-01
  &index=FTSE250
  &severity=material
  &limit=20

Authorization: Bearer fk_live_xxx

// Response
{
  "data": [
    {
      "id": "warn_01j8x2k...",
      "company": "Fevertree Drinks",
      "ticker": "FEVR",
      "index": "FTSE250",
      "announced_at": "2025-03-12T08:14:00Z",
      "severity": "material",
      "reason_primary": "demand_weakness",
      "reason_detail": "US on-trade volumes
        deteriorated sharply in H2",
      "confidence": 0.97,
      "rns_url": "https://..."
    }
  ],
  "meta": {
    "total": 284,
    "page": 1,
    "limit": 20
  }
}
GET /v1/company/{ticker}/warnings GET
// Get all warnings for a company
GET /v1/company/FEVR/warnings

// Response
{
  "company": {
    "name": "Fevertree Drinks plc",
    "ticker": "FEVR",
    "isin": "GB00B3FLWH99",
    "index": "FTSE250",
    "sector": "Beverages"
  },
  "warning_count": 4,
  "last_warning": "2025-03-12",
  "warnings": [
    { "id": "warn_01j8x2k", ... },
    { "id": "warn_01h4m9p", ... }
  ]
}
POST /v1/webhooks POST
// Register webhook (Professional+)
POST /v1/webhooks
{
  "url": "https://your-app.com/hook",
  "filters": {
    "index": ["FTSE100", "FTSE250"],
    "severity": ["material"],
    "min_confidence": 0.90
  }
}

// Payload fired on each match:
{
  "event": "warning.classified",
  "data": { ... },
  "classified_at": "2025-03-12T08:17:22Z",
  "latency_seconds": 187
}
D1 Database Schema SQL
-- Core warnings table
CREATE TABLE warnings (
  id          TEXT PRIMARY KEY,
  rns_id      TEXT UNIQUE,
  ticker      TEXT,
  company     TEXT,
  isin        TEXT,
  index_name  TEXT,
  announced_at DATETIME,
  raw_text    TEXT,

  -- Classification (populated by Claude)
  is_warning  BOOLEAN,
  confidence  REAL,
  severity    TEXT,
  reason_primary TEXT,
  reason_detail  TEXT,
  classified_at  DATETIME,

  -- Flags
  needs_review BOOLEAN DEFAULT false
);

Simple, transparent tiers

Free tracker for everyone. API access starts at £79/month. No enterprise sales motion required.

Free
£0
forever
  • Full live tracker, no login
  • 30-day rolling history
  • All filters and search
  • Source links to RNS
  • No API access
Professional
£299
per month
  • Everything in Developer
  • 3-year historical archive
  • Unlimited API calls
  • Real-time webhooks
  • Priority support + SLA