Quickstart
Track your first competitor in 3 minutes.
Prerequisites
- Sign up at app.usesignallabs.com
- Go to Settings > API Keys and create an API key
1
Create Your Company
curl -X POST https://app.usesignallabs.com/api/v1/companies \
-H "Authorization: Bearer sl_live_your_key" \
-H "Content-Type: application/json" \
-d '{"domain": "yourcompany.com"}'
import { SignalLabs } from '@signal-labs/sdk';
const sl = new SignalLabs(process.env.SIGNALLABS_API_KEY);
const company = await sl.companies.create({ domain: 'yourcompany.com' });
console.log(company.id);
from signallabs import SignalLabs
sl = SignalLabs(api_key="sl_live_your_key")
company = sl.companies.create(domain="yourcompany.com")
print(company["id"])
2
Discover Competitors
curl -X POST https://app.usesignallabs.com/api/v1/companies/{company_id}/competitors/discover \
-H "Authorization: Bearer sl_live_your_key"
const suggestions = await sl.companies.competitors(company.id).discover();
console.log(suggestions);
suggestions = sl.companies.competitors(company["id"]).discover()
print(suggestions)
3
Add a Competitor
curl -X POST https://app.usesignallabs.com/api/v1/companies/{company_id}/competitors \
-H "Authorization: Bearer sl_live_your_key" \
-H "Content-Type: application/json" \
-d '{"competitors": [{"name": "Competitor X", "website": "competitor.com"}]}'
const competitors = await sl.companies.competitors(company.id).add({
name: 'Competitor X',
website: 'competitor.com',
});
competitors = sl.companies.competitors(company["id"]).add(
name="Competitor X",
website="competitor.com"
)
4
Generate a Battlecard
curl -X POST https://app.usesignallabs.com/api/v1/companies/{company_id}/battlecards/generate \
-H "Authorization: Bearer sl_live_your_key" \
-H "Content-Type: application/json" \
-d '{"competitor_id": "competitor-uuid", "enablement_focus": "gtm_sales", "special_instructions": "Focus on enterprise pricing and our SOC 2 advantage"}'
const battlecard = await sl.companies.battlecards(company.id).generate({
competitor_id: competitors[0].id,
enablement_focus: 'gtm_sales',
special_instructions: 'Focus on enterprise pricing and our SOC 2 advantage',
});
console.log(battlecard.overview);
console.log(battlecard.win_strategy);
battlecard = sl.companies.battlecards(company["id"]).generate(
competitor_id=competitors[0]["id"],
enablement_focus="gtm_sales",
special_instructions="Focus on enterprise pricing and our SOC 2 advantage"
)
print(battlecard["overview"])
print(battlecard["win_strategy"])
The special_instructions field is optional (max 10,000 characters) — use it to guide the AI with specific context, focus areas, or instructions.
5
Attach Documents (optional)
You can upload competitive documents and attach them as additional context when generating battlecards:
# Upload a document
curl -X POST https://app.usesignallabs.com/api/v1/documents/upload \
-H "Authorization: Bearer sl_live_your_key" \
-F "file=@competitor-report.pdf" \
-F "company_id=your-company-id" \
-F "title=Q1 Competitor Report"
# Then generate with document context
curl -X POST https://app.usesignallabs.com/api/v1/companies/{company_id}/battlecards/generate \
-H "Authorization: Bearer sl_live_your_key" \
-H "Content-Type: application/json" \
-d '{"competitor_id": "...", "enablement_focus": "gtm_sales", "document_ids": ["document-id"]}'
// Upload a document
const doc = await sl.documents.upload({
file: 'competitor-report.pdf',
company_id: company.id,
title: 'Q1 Competitor Report',
});
// Then generate with document context
const battlecard = await sl.companies.battlecards(company.id).generate({
competitor_id: competitors[0].id,
enablement_focus: 'gtm_sales',
document_ids: [doc.id],
});
# Upload a document
doc = sl.documents.upload(
file="competitor-report.pdf",
company_id=company["id"],
title="Q1 Competitor Report"
)
# Then generate with document context
battlecard = sl.companies.battlecards(company["id"]).generate(
competitor_id=competitors[0]["id"],
enablement_focus="gtm_sales",
document_ids=[doc["id"]]
)
Combined document text must not exceed 100,000 characters. Documents are automatically parsed, chunked, and embedded for RAG.
6
Generate a Landscape Analysis (optional)
Compare multiple competitors at once with a landscape battlecard. Requires 2 or more competitor IDs.
curl -X POST https://app.usesignallabs.com/api/v1/companies/{company_id}/battlecards/generate \
-H "Authorization: Bearer sl_live_your_key" \
-H "Content-Type: application/json" \
-d '{"competitor_ids": ["competitor-id-1", "competitor-id-2"], "enablement_focus": "landscape"}'
const landscape = await sl.companies.battlecards(company.id).generate({
competitor_ids: [competitors[0].id, competitors[1].id],
enablement_focus: 'landscape',
});
console.log(landscape.overview);
landscape = sl.companies.battlecards(company["id"]).generate(
competitor_ids=[competitors[0]["id"], competitors[1]["id"]],
enablement_focus="landscape"
)
print(landscape["overview"])