Earnings-call transcript to knowledge graph

Send a paragraph of a CFO call to /v2/graph/extract and query the resulting entity graph

All recipes· graph· 6 minutesbeginnercypher

Earnings-call transcript to knowledge graph

Objective

Equity analysts spend hours reading transcripts to map who-acquired-whom, who-partners-with-whom, and which executives moved where. The POST /v2/graph/extract endpoint asks an LLM to pull (subject, predicate, object) triples from any text and materializes them as nodes and edges in your tenant graph. The wow moment: paste one paragraph, get back a queryable graph of companies, people, and partnerships that you can join with anything else you already store.

Step 1: Send the transcript paragraph

curl -X POST https://localhost:8443/v2/graph/extract \
  -H "Authorization: Bearer $AIDB_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "On the Q1 2026 call, Northwind Logistics CEO Marisol Guerrero confirmed the acquisition of Cascade Freight for $480M, closing in May. CFO Devon Park said the merged entity will operate under the Northwind brand and will partner with Tessera Robotics on autonomous yard tractors. Former Cascade COO Lin Hao will lead the integration. Northwind also disclosed a five-year supply agreement with Helia Energy for renewable diesel.",
    "default_node_label": "Entity",
    "node_provenance": {"source": "earnings_q1_2026", "sector": "logistics"},
    "edge_provenance": {"source": "earnings_q1_2026"},
    "min_confidence": 0.6
  }'

The response gives back nodes_created, edges_created, the entities map (entity text → node id), and the committed triples. You can also see what was dropped (low confidence, self-loop, etc.) under discarded.

Step 2: Query the materialized graph

// "Who took what role at the post-merger Northwind entity?"
MATCH (person)-[r]->(target)
WHERE target.name IN ["Northwind Logistics", "Cascade Freight"]
   OR (target)-[:ACQUIRED|MERGED_WITH]-(:Entity {name: "Cascade Freight"})
RETURN person.name AS person,
       type(r)     AS role_or_action,
       target.name AS target,
       r.confidence AS llm_confidence
ORDER BY llm_confidence DESC;
// "Show every partnership and supply agreement disclosed on the call."
MATCH (a)-[r:PARTNERS_WITH|SUPPLIES|HAS_SUPPLY_AGREEMENT_WITH]-(b)
WHERE r.source = "earnings_q1_2026"
RETURN a.name AS party_a,
       type(r) AS relation,
       b.name AS party_b,
       r.confidence AS confidence;

What's happening

  • The extractor prompt asks the LLM for strict JSON triples — no prose, no fences — and the parser strips stray text and slices to the first [ / last ] before deserializing. Provider is whatever you configured (OpenAI, Anthropic, Ollama, local GGUF) — same pipeline.
  • node_provenance and edge_provenance get merged onto every created node/edge so you can filter by document source. Re-running on the same text is idempotent — duplicate edges go into discarded rather than creating duplicates.
  • One paragraph yielded ~6 entities (people, companies) and ~5 edges (CEO_OF, ACQUIRED, PARTNERS_WITH, SUPPLIES, COO_OF). A traditional NER pipeline takes weeks of training; here it took one curl.
  • The same endpoint accepts transcribed audio/video and OCR'd PDFs after aidb-multimedia produces text, so analyst pipelines can ingest calls, filings, and decks through one door.
  • r.confidence lets you trust-rank facts: edges below 0.6 were dropped here; below 0.85 you might surface "review queue" rather than auto-publishing.

Try this next

MATCH (e {source: "earnings_q1_2026"})
RETURN labels(e)[0] AS entity_type, count(e) AS extracted_count
ORDER BY extracted_count DESC;
MATCH (a)-[r]->(b)
WHERE r.source = "earnings_q1_2026" AND r.confidence < 0.75
RETURN a.name, type(r), b.name, r.confidence
ORDER BY r.confidence;
MATCH (p)-[:CEO_OF|COO_OF|CFO_OF|LEADS]->(c)
RETURN p.name AS executive, c.name AS company;

Tags

graphcypherextractfinancebeginner

Run this on your own machine

Install SynapCores Community Edition free, paste the SQL or Cypher above into the bundled web UI, and watch it run.

Download Free CE