Competitive intelligence on demand

Monitor competitors, markets, and signals — programmatically.

For

B2B sales tools, market research platforms, VC ops, growth teams — anyone whose product needs to know what is happening in a specific industry vertical right now.

The pain

Without a real retrieval layer.

Manual competitor monitoring is a part-time job no one wants. Google Alerts is unreliable and ad-polluted. Building your own crawler is six months of work just to start. Most "monitoring" SaaS charge per-keyword and lock data into their UI.

With SiftQ

One call, the right shape.

A scheduled SiftQ query gives you fresh, structured signal about a competitor or market on whatever cadence you want. Hand the results to an LLM for change-detection and you have a fully automated brief that drops into Slack every morning.

Recommended config

Start with this shape.

scopenews + webpage
size20
optionsincludeRawContent=true on confirmed leads only · Schedule daily or hourly
Working code

Paste, run, ship.

Python — Daily competitor brief
import os, requests, anthropic
from datetime import datetime

claude = anthropic.Anthropic()
HEADERS = {"Authorization": f"Bearer {os.environ['SIFTQ_API_KEY']}"}

COMPETITORS = ["Acme Robotics", "Beta Industries", "Gamma Labs"]

def fresh_news(company: str) -> list[dict]:
    r = requests.post(
        "https://api.siftq.com/v1/search",
        headers=HEADERS,
        json={
            "q": f'"{company}" announcement OR launch OR funding OR hire',
            "scope": "news",
            "size": "15",
            "conciseSnippet": True,
        },
        timeout=15,
    )
    return [h for h in r.json().get("webpages", []) if h.get("date")]

def brief(company: str) -> str:
    items = fresh_news(company)
    if not items:
        return f"## {company}\n_No notable news in the last cycle._"
    feed = "\n".join(f"- {h['date']}: {h['title']} — {h['link']}" for h in items)
    summary = claude.messages.create(
        model="claude-sonnet-4-6", max_tokens=400,
        messages=[{
            "role": "user",
            "content": f"3 bullets summarizing what {company} did this week:\n\n{feed}",
        }],
    ).content[0].text
    return f"## {company}\n{summary}\n\n<details>{feed}</details>"

print(f"# Competitor Brief — {datetime.now():%Y-%m-%d}\n")
for c in COMPETITORS:
    print(brief(c), "\n")
Why SiftQ for this
FAQ

Likely questions.

How often should I poll?

Daily is the sweet spot for most B2B competitor monitoring. Hourly only if your domain genuinely moves fast (crypto, breaking-news products).

Will my queries appear in the competitor's analytics?

No. SiftQ is server-side; we crawl public web pages independently. The target site sees a SiftQ-attributed request, not yours.

How do I avoid duplicate alerts?

Hash the result URL and date and store in a small key-value store (Redis, Postgres). Only emit alerts for unseen hashes.

Keep reading
Use case
Grounding chatbots with live data
Stop your assistant from confidently making things up.
Use case
Search for autonomous research agents
Give your agent a primitive it can call dozens of times per task.
Glossary
Web retrieval API
An API that takes a query and returns ranked web documents in a format an LLM can consume.
Glossary
Citation
A link or reference back to the source from which an LLM-generated claim was derived.

Try it on your
real workload.

The free tier covers most prototypes. No credit card.