Your code calls Nimble at three steps of an investigation
- Each step runs during the investigation, when your pipeline needs the data.
- Nothing is harvested in bulk, and nothing is stored after the run.
- Every value comes back with the URL it was read on.
Links that land on a search page
| You send | A URL and the name to look up |
|---|---|
| You get | The record page itself |
| Nimble product | Extract API with browser actions, driven by your LLM |
Financial-crime adverse media
| You send | A company or person, with aliases |
|---|---|
| You get | One row per enforcement action or lawsuit, with its source |
| Nimble product | One Web Search Agent call |
People who share a name
| You send | A name and the identifiers you hold |
|---|---|
| You get | Every person with that name, each with a verdict and its evidence |
| Nimble product | One Web Search Agent call with LinkedIn people search |
Two agents are ready in your Nimble account
Log in to your Nimble account to open them. Each one already has two runs on your sample cases.
Financial-crime screening
Use case 2. One call per subject returns one row per enforcement action or lawsuit.
Same-name person resolution
Use case 3. One call per name returns every person found, with a verdict for each.
We score each use case on your own cases
One case is one call from your code. We compare what that call returns with what your team found.
| Use case | First measure | Second measure |
|---|---|---|
| Search-page links | The share of links we have never seen that reach the right record | The share of lookups where no site needed its own code |
| Financial-crime media | The share of the findings that mattered to you that one call returns | The accuracy of every returned row, checked by hand |
| Same-name people | No run reports two different people as one person | The share of people with the correct verdict |
| Audit trail | Every finding keeps a copy of the page, a screenshot, the time it was read and a fingerprint of the file | A finding can be checked again later from its saved copy |
We need four things from your team
- The Danske Bank and Boeing findings that mattered in your own investigations.
- The identifiers you hold on Gilbert Verdian and Brad Jackson, such as date of birth, employer or ID number.
- About 10 more cases per use case, each with the result you expected.
- The search-page links that give you the most trouble today.
The trial ends with scores on your cases in the week of 26 October
Agents in your account
The two agents are in your Nimble account, with two runs each on your sample cases. We also tested them on companies they had never seen.
Walkthrough with your engineers
We walk your engineers through the calls from your code and run your first labelled cases.
Scores on your cases
We run your labelled cases and send the scores for each use case, with every run ID.
Your LLM drives Nimble Extract through any search form
- Some sanctions and registry links open a search page instead of the record.
- A script per site breaks when the site changes, and you cannot write one for a site you have not seen.
- Nimble Extract opens the page in a real browser. It can type into a field, click a button and wait for the result.
- Your LLM reads each page and chooses the next action, so no site needs its own code.
Your LLM runs the same five steps on every site
Render the link
Extract opens the URL in a browser and returns the page with every form field.
Choose the action
Your LLM finds the field that takes a name and the spellings to try.
Submit the search
Extract types the name, clicks search and waits for the results.
Pick the record
Your LLM picks the matching result. It reports a tie or no match when that is what the page shows.
Open the record
Extract fetches the record page and saves a copy for the audit trail.
Both of your sample links reach the record in three Extract calls
We ran these calls on 12 October 2026 on the two links your team sent. Each block shows what Extract returned and what the LLM decides next.
Link: https://sanctionssearch.ofac.treas.gov/ · Name: Nicolás Maduro
Rendered sanctionssearch.ofac.treas.gov
<input name="ctl00$MainContent$txtLastName" title="Enter name as search criteria."> <input name="ctl00$MainContent$txtAddress" title="Enter part of an address as search criteria."> <input name="ctl00$MainContent$txtID" title="Enter ID number or digital currency address as search criteria."> <select name="ctl00$MainContent$ddlType" title="Select an SDN Type"> <select name="ctl00$MainContent$ddlCountry" title="Select a country as search criteria."> <input type="submit" name="ctl00$MainContent$btnSearch" value="Search">
Type "Maduro" in txtLastName and click Search. OFAC matches exact spellings, so the LLM drops the accent.
Typed "Maduro", clicked Search and waited for the results table
[
{"fill": {"selector": "#ctl00_MainContent_txtLastName", "value": "Maduro"}},
{"click": {"selector": "#ctl00_MainContent_btnSearch", "timeout": 8000}},
{"wait_for_element": {"selector": "#gvSearchResults", "visible": true, "timeout": 15000}}
]Lookup Results: 4 Found FELIX B. MADURO S.A. Details.aspx?id=19147 FLORES DE MADURO, Cilia Adela Details.aspx?id=25079 MADURO GUERRA, Nicolas Ernesto Details.aspx?id=26946 MADURO MOROS, Nicolas Details.aspx?id=22790
Open MADURO MOROS, Nicolas, the head of state of Venezuela
Opened Details.aspx?id=22790
Type: Individual List: SDN Last Name: MADURO MOROS Program: VENEZUELA; IRAN-CON-ARMS-EO First Name: Nicolas Title: President of the Bolivarian Republic of Venezuela Date of Birth: 23 Nov 1962 Place of Birth: Caracas, Venezuela Citizenship: Venezuela Cedula No.: 5892464 (Venezuela)
Return the record
Link: https://main.un.org/securitycouncil/en/content/un-sc-consolidated-list · Name: Dawood Ibrahim
Rendered the consolidated list page on main.un.org
Search UN Security Council Consolidated Lists -> https://search.sanctions.un.org HTML -> https://scsanctions.un.org/consolidated XML -> https://scsanctions.un.org/resources/xml/en/consolidated.xml
This page has no name field. Follow the link "Search UN Security Council Consolidated Lists".
Opened search.sanctions.un.org in a stealth browser, waited for the app, typed "Dawood Ibrahim" and clicked Search
[
{"wait_for_element": {"selector": "input.MuiInputBase-input", "visible": true, "timeout": 20000}},
{"click": {"selector": "input.MuiInputBase-input", "timeout": 5000}},
{"fill": {"selector": "input.MuiInputBase-input", "value": "Dawood Ibrahim", "mode": "type"}},
{"click": {"selector": "button.search-btn", "timeout": 8000}}
]Total: 51 Score Full name Type Reference Regime 12.51 DAWOOD Individual QDi.135 Al-Qaida 8.82 IBRAHIM Individual QDi.299 Al-Qaida 6.17 IBRAHIM Individual IQi.084 Iraq 5.86 DAWOOD Individual IRi.002 Iran
Open the top match, DAWOOD, QDi.135, which scores far above the next result
Repeated the search and clicked the first result row
QDi.135 - DAWOOD IBRAHIM KASKAR 23 aliases, including Dawood Ebrahim, Sheikh Dawood Hassan, Anis Ibrahim, Daud Hasan Shaikh Ibrahim Kaskar and Daud Ibrahim Memon Kaskar Note: Father's name is Sheikh Ibrahim Ali Kaskar, mother's name is Amina Bi, wife's name is Mehjabeen Shaikh. International arrest warrant issued by the Government of India.
Return the record
The same loop in Python
import os, requests def extract(url, actions=None, driver=None): body = {"url": url, "render": True, "formats": ["html"]} if actions: body["browser_actions"] = actions # chosen by your LLM from the previous page if driver: body["driver"] = driver # "vx10" for JavaScript apps such as the UN search r = requests.post("https://sdk.nimbleway.com/v2/extract", headers={"Authorization": f"Bearer {os.environ['NIMBLE_API_KEY']}"}, json=body, timeout=300) return r.json()["data"]["html"] page = extract(link) # call 1 for step in range(4): # cap the number of steps decision = llm_next_step(page, name) # your model: actions, a new URL, or done if decision.done: break page = extract(decision.url, decision.actions, decision.driver)
Your LLM handles five kinds of page
| Page | Example | Next action |
|---|---|---|
| A search form with a text field | OFAC sanctions search | Type the name, click search and wait for the results |
| A search that puts the query in the URL | UK Companies House | Build the search URL and open it |
| A page that links to a separate search | UN Security Council consolidated list page | Follow the link to the search site |
| A search built as a JavaScript app | search.sanctions.un.org | Use the stealth browser, wait for the field, then type and search |
| A page behind a login | Paid registries | Report the page as not reachable |
The Nimble Plugin gives your LLM the same tools
- The plugin installs the Nimble skill and the Nimble MCP server into Claude Code, Cursor or Codex.
- Your engineers can work out the actions for a new site with the LLM before they add the site to your pipeline.
- The plugin's skill drives form searches through the Nimble CLI. The CLI accepts the same browser actions as the API.
Install the Nimble CLI
The CLI runs the Extract calls, and it reads your key from NIMBLE_API_KEY.
Install the plugin
The two commands below install it in Claude Code. The docs give the commands for Cursor and Codex.
Ask for the record
Give the LLM the link and the name. Ask it to reach the record page and show each Extract call it made.
npm i -g @nimble-way/nimble-cli export NIMBLE_API_KEY="your-api-key" claude plugin marketplace add Nimbleway/agent-skills claude plugin install nimble@nimble-plugin-marketplace
One agent call returns the financial-crime actions against a subject
- The agent first lists every country where the subject is registered, listed, operates or was investigated.
- It then searches each country's prosecutors, regulators, financial intelligence unit, tax authority, stock exchange and courts by name.
- It searches in the local language and in English, then the US, UK, EU and UN bodies that act on foreign companies.
- It keeps only money laundering, terrorist financing, sanctions, bribery, fraud, tax evasion, regulator enforcement and financial lawsuits.
- Each row says whether the subject was the accused party, so a case where the subject was the victim never reaches your case file.
Example output from your Nimble account
Input sent: Screen Danske Bank A/S. Entity type: company. Home jurisdiction: Denmark. Known aliases: Danske Bank, Danske Bank A/S. Start by listing every jurisdiction where the subject is incorporated, listed, operates or operated, or has been investigated, then search each one. Return every in-scope event in any jurisdiction, or an empty findings list if there are none.
14 jurisdictions searched:
| Date | Authority | Event | Role | Headline and source |
|---|---|---|---|---|
| 2025-12-13 | U.S. Department of Justice | Other | Settled or fined | Danske Bank confirms conclusion of US Department of Justice probation |
| 2025-01-22 | Norwegian Financial Supervisory Authority (Finanstilsynet) | Fine | Settled or fined | Danske Bank receives administrative fine from the Norwegian Financial Supervisory Authority |
| 2023-01-05 | U.S. District Court for the Southern District of New York | Court ruling | Settled or fined | SDNY Sentences Danske Bank in Massive AML Scandal |
| 2022-12-14 | City Court of Copenhagen (Københavns Byret) | Court ruling | Settled or fined | Resolution with SCU accepted at the City Court of Copenhagen |
| 2022-12-13 | Danish Special Crime Unit (SCU, State Prosecutor for Serious Economic and International Crime) | Settlement | Settled or fined | Danske Bank reaches coordinated resolutions with the US and Danish authorities regarding the Estonia matter |
| 2022-12-13 | U.S. Department of Justice (Criminal Division MLARS) and U.S. Attorney's Office for the Southern District of New York | Guilty plea | Settled or fined | Danske Bank Pleads Guilty to Fraud on U.S. Banks in Multi-Billion Dollar Scheme to Access the U.S. Financial System |
| 2022-12-13 | U.S. Securities and Exchange Commission | Settlement | Settled or fined | SEC Charges Danske Bank with Fraud for Misleading Investors about Its Anti-Money Laundering Compliance Failures in Estonia |
| 2022-09-13 | Central Bank of Ireland | Fine | Settled or fined | Danske Bank A/S fined €1,820,000 and reprimanded by the Central Bank of Ireland for transaction monitoring failures in respect of anti-money laundering and terrorist financing systems |
| 2021-08-25 | U.S. Court of Appeals for the Second Circuit | Appeal | Defendant | Danske Bank defeats appeal in U.S. over money laundering scandal |
| 2021-08 | U.S. District Court for the Eastern District of New York | Civil suit | Defendant | Danske Bank sued in New York's Eastern District for aiding and abetting terrorism |
| 2021-02 | Danish Financial Supervisory Authority (Finanstilsynet) | Regulator order | Settled or fined | Danish FSA issues sharply critical decision of Danske Bank's AML remediation efforts and orders the bank to engage expert consultants for a period of six months to monitor the implementation of the bank's Financial Crime Plan of May 25, 2020 |
| 2020-12 | U.S. Department of the Treasury, Office of Foreign Assets Control (OFAC) | Other | Investigated | OFAC closes investigation of Danske Bank |
| 2020-11 | State Prosecutor for the Danish Special Crime Unit | Charge | Accused | Danish prosecutor adds to initial preliminary charge |
| 2020-11 | Danish Financial Supervisory Authority (Finanstilsynet) | Regulator order | Settled or fined | Danish FSA issues Danske Bank inspection report, four orders, and a reprimand |
| 2020-08-24 | U.S. District Court for the Southern District of New York (Judge Valerie Caproni) | Acquittal or dismissal | Defendant | U.S. judge dismisses lawsuit against Danske Bank over money laundering scandal |
| 2019-03-19 | Courts of Denmark (Copenhagen City Court; High Court of Eastern Denmark) | Civil suit | Defendant | Danske Bank |
| 2019-02-21 | U.S. Securities and Exchange Commission | Investigation opened | Investigated | Danske Bank in dialogue with US securities industry regulator |
| 2019-02-19 | Estonian Financial Supervision Authority (Finantsinspektsioon) | Regulator order | Settled or fined | Massive Danske Bank Money Laundering Scandal Continues to Unfold |
| 2019-02 | Tribunal de Grande Instance de Paris (investigating judge) | Investigation opened | Investigated | Danske Bank placed under formal investigation by an investigating judge of the Tribunal de Grande Instance de Paris |
| 2019-01 | U.S. District Court for the Southern District of New York | Civil suit | Defendant | And Here Come the Lawyers: Securities Fraud Suits Commence Private Litigation Phase of Danske Bank Scandal |
| 2018-11-28 | Danish State Prosecutor for Serious Economic and International Crime | Charge | Accused | Massive Danske Bank Money Laundering Scandal Continues to Unfold |
| 2018-10-04 | U.S. Department of Justice | Investigation opened | Investigated | How Danske Bank's Estonian money laundering scandal unfolded |
| 2018-05-03 | Finanstilsynet (Danish Financial Supervisory Authority) | Regulator order | Settled or fined | Afgørelse om Danske Banks ledelse og styring i estisk hvidvasksag |
| 2017-12 | Danish public prosecutor | Fine | Settled or fined | How Danske Bank's Estonian money laundering scandal unfolded |
Show one row as the API returns it
{
"url": "https://danskebank.com/news-and-insights/news-archive/company-announcements/2025/ca15122025",
"category": "money_laundering",
"headline": "Danske Bank confirms conclusion of US Department of Justice probation",
"language": "English",
"authority": "U.S. Department of Justice",
"event_date": "2025-12-13",
"event_type": "other",
"publication": "Danske Bank",
"jurisdiction": "United States",
"subject_role": "settling_or_fined",
"authority_page": false,
"case_reference": "Company Announcement No. 55/2025",
"additional_urls": null,
"allegation_summary": "Danske Bank confirmed that the three-year corporate probation imposed under its December 2022 DOJ plea agreement concluded on 13 December 2025.",
"subject_name_as_published": "Danske Bank"
}Input sent: Screen The Boeing Company. Entity type: company. Home jurisdiction: United States. Known aliases: Boeing, The Boeing Company. Start by listing every jurisdiction where the subject is incorporated, listed, operates or operated, or has been investigated, then search each one. Return every in-scope event in any jurisdiction, or an empty findings list if there are none.
12 jurisdictions searched:
| Date | Authority | Event | Role | Headline and source |
|---|---|---|---|---|
| 2026-08-06 | U.S. Department of Commerce, Bureau of Industry and Security (Office of Antiboycott Compliance) | Fine | Settled or fined | BIS fines Boeing over anti-boycott breaches |
| 2026-05-22 | U.S. Court of Appeals for the Fifth Circuit | Appeal | Other | US appeals court denies rehearing on Boeing NPA |
| 2026-03-31 | U.S. Court of Appeals for the Fifth Circuit | Appeal | Other | United States v. The Boeing Company |
| 2025-11-06 | U.S. District Court for the Northern District of Texas | Acquittal or dismissal | Accused | United States v. The Boeing Company |
| 2025-05-29 | U.S. Department of Justice | Settlement | Settled or fined | United States v. The Boeing Company |
| 2024-12-05 | U.S. District Court for the Northern District of Texas | Court ruling | Accused | United States v. The Boeing Company |
| 2024-05-14 | U.S. Department of Justice | Other | Investigated | United States v. The Boeing Company |
| 2024-02-29 | U.S. Department of State, Bureau of Political-Military Affairs | Settlement | Settled or fined | U.S. Department of State Concludes $51 Million Settlement Resolving Export Violations by The Boeing Company |
| 2022-09-22 | U.S. Securities and Exchange Commission | Settlement | Settled or fined | Boeing to Pay $200 Million to Settle SEC Charges that it Misled Investors about the 737 MAX |
| 2022-01-08 | U.S. Court of Appeals for the Seventh Circuit (as reported by Bloomberg Law) | Appeal | Defendant | Boeing Investors Get 737 Max Crash Litigation Revived on Appeal |
| 2021-11-05 | Delaware Court of Chancery | Settlement | Defendant | The Boeing Company Shareholder Derivative Litigation |
| 2021-01-07 | U.S. Department of Justice | Charge | Accused | Boeing Charged with 737 Max Fraud Conspiracy and Agrees to Pay over $2.5 Billion |
| 2021-01-07 | U.S. Department of Justice | Settlement | Settled or fined | Boeing Charged with 737 Max Fraud Conspiracy and Agrees to Pay over $2.5 Billion |
| 2006-06-30 | U.S. Department of Justice | Settlement | Settled or fined | Boeing to Pay United States Record $615 Million to Resolve Fraud Allegations |
Show one row as the API returns it
{
"url": "https://media.bis.gov/media/documents/a781.pdf",
"category": "sanctions_or_export_control",
"headline": "BIS fines Boeing over anti-boycott breaches",
"language": "English",
"authority": "U.S. Department of Commerce, Bureau of Industry and Security (Office of Antiboycott Compliance)",
"event_date": "2026-08-06",
"event_type": "fine_or_penalty",
"publication": "Bureau of Industry and Security; Global Investigations Review",
"jurisdiction": "United States",
"subject_role": "settling_or_fined",
"authority_page": true,
"case_reference": null,
"additional_urls": "https://globalinvestigationsreview.com/just-sanctions/article/bis-fines-boeing-over-anti-boycott-breaches",
"allegation_summary": "BIS's Office of Antiboycott Compliance charged Boeing with two EAR §760.2(d) violations for furnishing Israeli-boycott certification language on 2019 Dubai Airshow invoices; Global Investigations Review reported BIS fined Boeing.",
"subject_name_as_published": "The Boeing Company"
}Send one request per subject
import os, time, requests API = "https://sdk.nimbleway.com/v2/agents" H = {"Authorization": f"Bearer {os.environ['NIMBLE_API_KEY']}"} AGENT_ID = "wsa_..." # the agent ID we give you when the agent is in your account prompt = ("Screen Danske Bank A/S. Entity type: company. Home jurisdiction: Denmark. " "Known aliases: Danske Bank. Start by listing every jurisdiction where the subject is " "incorporated, listed, operates or operated, or has been investigated, then search each one. " "Return every in-scope event in any jurisdiction, or an empty findings list if there are none.") run = requests.post(f"{API}/{AGENT_ID}/runs", headers=H, json={"input": prompt}).json() while requests.get(f"{API}/{AGENT_ID}/runs/{run['id']}", headers=H).json()["status"] not in ("completed", "failed"): time.sleep(30) result = requests.get(f"{API}/{AGENT_ID}/runs/{run['id']}/result", headers=H).json() findings = [f for f in result["output"]["content"]["findings"] if f["subject_role"] not in ("victim", "witness_or_other")]
curl -X POST https://sdk.nimbleway.com/v2/agents/$AGENT_ID/runs \ -H "Authorization: Bearer $NIMBLE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"input": "Screen Danske Bank A/S. Entity type: company. Home jurisdiction: Denmark. Known aliases: Danske Bank. Start by listing every jurisdiction where the subject is incorporated, listed, operates or operated, or has been investigated, then search each one. Return every in-scope event in any jurisdiction, or an empty findings list if there are none."}' # then poll GET /v2/agents/$AGENT_ID/runs/{run_id} and read GET .../runs/{run_id}/result
Each finding is one row with eleven fields
| Field | What it holds |
|---|---|
| category | One of nine financial-crime categories, such as money_laundering or bribery_or_corruption |
| event_type | What happened, such as charge_or_indictment, guilty_plea, settlement_or_resolution or fine_or_penalty |
| subject_role | The subject's role, such as accused_or_charged, settling_or_fined or victim |
| authority | The prosecutor, regulator, court or outlet, by its own name |
| jurisdiction | The country of that authority |
| case_reference | The docket or case number as printed, when the page shows one |
| event_date | The date of the action as the source states it |
| headline | The headline exactly as published |
| url | The authority's own page when one exists |
| authority_page | True when the URL is the authority's or the court's own page |
| allegation_summary | One sentence on what was done or alleged, and by whom |
The response also lists every country the agent searched and the authorities it searched in each one.
The agent finds every person with the name and gives each one a verdict
- The agent first runs a LinkedIn people search for the name, then for the name with the place you supply.
- It reads sanctions lists, company registries, regulators and courts, then profiles and press.
- It records each value exactly as printed, with the URL and the name that page prints.
- It then compares each person with the identifiers you supplied and gives one verdict per person.
A strong identifier is the only way to reach same person
| Verdict | When the agent gives it |
|---|---|
| same_person | A date of birth, passport, national ID, tax ID or registry officer ID on a page equals the value you supplied |
| different_person | The same attribute carries a different value on the page |
| consistent_unconfirmed | Weaker details such as employer or city agree, and nothing conflicts |
| unresolved | The pages do not say enough to decide |
The name alone never decides a verdict. Each verdict names the attribute that decided it and the page it was read on.
Example output from your Nimble account
Input sent: Gilbert Verdian. Supplied by the investigator: no identifiers beyond the name. Find every person with this name and judge each one against the supplied details.
Official record found: Companies House officer appointments record, Gilbert VERDIAN, UK Companies House. Open the record
| Person | Verdict | Who the pages describe | What decided it | Page |
|---|---|---|---|---|
| P1 | unresolved | Founder and CEO · United Kingdom | nothing decided it | source |
Show two evidence rows and one verdict as the API returns them
{
"attestations": [
{
"side": "supplied",
"attribute": "full_name",
"qualifier": null,
"person_ref": "P0",
"source_url": null,
"source_date": null,
"source_class": null,
"value_verbatim": "Gilbert Verdian",
"about_name_as_printed": "Gilbert Verdian"
},
{
"side": "found",
"attribute": "full_name",
"qualifier": null,
"person_ref": "P1",
"source_url": "https://find-and-update.company-information.service.gov.uk/officers/quDo4Xesd_el_0RCx9xJ36g157g/appointments",
"source_date": "2026-10-12",
"source_class": "corporate_registry",
"value_verbatim": "Gilbert VERDIAN",
"about_name_as_printed": "Gilbert VERDIAN"
}
],
"candidate_verdicts": [
{
"reason": "Only the name was supplied; found record shows January 1978, British, Quant director, but no supplied identifier exists to compare.",
"verdict": "unresolved",
"person_ref": "P1",
"found_value": null,
"supplied_value": null,
"deciding_attribute": "none",
"deciding_source_url": null,
"strong_identifier_match": false
}
]
}Input sent: Brad Jackson. Supplied by the investigator: lives in Ontario, Canada. Find every person with this name and judge each one against the supplied details.
| Person | Verdict | Who the pages describe | What decided it | Page |
|---|---|---|---|---|
| P1 | consistent_unconfirmed | Atlantic Coated Papers Ltd. · Greater Toronto Area, Canada | residence country: Greater Toronto Area, Canada | source |
| P7 | consistent_unconfirmed | OAKWOOD TRANSPORT · Ingersoll, Ontario, Canada | residence country: Ingersoll, Ontario, Canada | source |
| P17 | consistent_unconfirmed | 2592580 ont inc · Ontario, Canada | residence country: Ontario, Canada | source |
| P43 | different_person | Zions Bancorporation · Salt Lake City Metropolitan Area | residence country: Salt Lake City Metropolitan Area | source |
| P47 | different_person | Office of Texas Governor Greg Abbott · Austin, Texas, United States | residence country: Austin, Texas, United States | source |
| P44 | different_person | Denver Metropolitan Area | residence country: Denver Metropolitan Area | source |
| P46 | different_person | Gresham, Oregon, United States | residence country: Gresham, Oregon, United States | source |
| P41 | different_person | Lake Oswego, OR | residence country: Lake Oswego, OR | source |
| P42 | different_person | New Zealand | residence country: New Zealand | source |
| P45 | different_person | Brisbane City, QLD | residence country: Brisbane City, QLD | source |
| P48 | different_person | residence country: San Antonio, Texas | source | |
| P49 | consistent_unconfirmed | place of birth: Thorold, ON, CAN | source | |
| P50 | consistent_unconfirmed | Port Stanley, ON | residence country: Port Stanley, ON | source |
| P51 | different_person | Student · Vancouver, Canada | residence country: Vancouver, Canada | source |
| P2 | different_person | Self-employed · Vancouver, BC | residence country: Vancouver, BC | source |
| P3 | different_person | University of Victoria · Langford, BC | residence country: Langford, BC | source |
| P4 | consistent_unconfirmed | Toronto, ON | residence country: Toronto, ON | source |
| P5 | different_person | ACCOUNTANTS R US · Burnaby, BC | residence country: Burnaby, BC | source |
| P6 | different_person | North Vancouver, BC | residence country: North Vancouver, BC | source |
| P8 | different_person | McKesson · 100 Mile House, BC | residence country: 100 Mile House, BC | source |
| P9 | different_person | Greater Vancouver Metropolitan Area | residence country: Greater Vancouver Metropolitan Area | source |
| P10 | unresolved | Carleton Refrigeration, Heating and Air Conditioning Ltd. · Canada | nothing decided it | source |
| P11 | consistent_unconfirmed | Environment, Conservation and Parks | Environnement, Protection de la nature et Parcs · Bo | residence country: Bowmanville, ON | source |
| P12 | different_person | Frontier Power Products · Winnipeg, MB | residence country: Winnipeg, MB | source |
| P13 | different_person | Raylec Power · Cumberland, BC | residence country: Cumberland, BC | source |
| P14 | unresolved | Canada | nothing decided it | source |
| P15 | consistent_unconfirmed | Habitat for Humanity Canada · London, ON | residence country: London, ON | source |
| P16 | different_person | Self-employed · Nova Scotia, Canada | residence country: Nova Scotia, Canada | source |
| P18 | consistent_unconfirmed | charlies general mat · Ontario, Canada | residence country: Ontario, Canada | source |
| P19 | consistent_unconfirmed | Town of Bracebridge · Bracebridge, ON | residence country: Bracebridge, ON | source |
| P20 | consistent_unconfirmed | Guelph, ON | residence country: Guelph, ON | source |
| P21 | unresolved | Canada | nothing decided it | source |
| P22 | consistent_unconfirmed | Ajax, ON | residence country: Ajax, ON | source |
| P23 | unresolved | Canada | nothing decided it | source |
| P24 | unresolved | Canada | nothing decided it | source |
| P25 | unresolved | Canada | nothing decided it | source |
| P26 | consistent_unconfirmed | Toronto, ON | residence country: Toronto, ON | source |
| P27 | different_person | Surrey, BC | residence country: Surrey, BC | source |
| P28 | different_person | Burnaby, BC | residence country: Burnaby, BC | source |
| P29 | different_person | Kamloops, BC | residence country: Kamloops, BC | source |
| P30 | unresolved | Sault Marine Services · Canada | nothing decided it | source |
| P31 | consistent_unconfirmed | Barminco · Manitouwadge, ON | residence country: Manitouwadge, ON | source |
| P32 | different_person | Almega Resurfacing & Redesign Solutions · British Columbia, Canada | residence country: British Columbia, Canada | source |
| P33 | different_person | Self-employed · Coquitlam, BC | residence country: Coquitlam, BC | source |
| P34 | consistent_unconfirmed | London, ON | residence country: London, ON | source |
| P35 | consistent_unconfirmed | Hamilton, ON | residence country: Hamilton, ON | source |
| P36 | consistent_unconfirmed | Kitchener, ON | residence country: Kitchener, ON | source |
| P37 | consistent_unconfirmed | Emcon Services Inc. · Pays Plat 51, ON | residence country: Pays Plat 51, ON | source |
| P38 | consistent_unconfirmed | CP Rail · Brampton, ON | residence country: Brampton, ON | source |
| P39 | consistent_unconfirmed | CDI · Ontario, Canada | residence country: Ontario, Canada | source |
| P40 | consistent_unconfirmed | C.P.Rail · Smiths Falls, ON | residence country: Smiths Falls, ON | source |
Show two evidence rows and one verdict as the API returns them
{
"attestations": [
{
"side": "supplied",
"attribute": "full_name",
"qualifier": null,
"person_ref": "P0",
"source_url": null,
"source_date": null,
"source_class": null,
"value_verbatim": "Brad Jackson",
"about_name_as_printed": "Brad Jackson"
},
{
"side": "supplied",
"attribute": "residence_country",
"qualifier": null,
"person_ref": "P0",
"source_url": null,
"source_date": null,
"source_class": null,
"value_verbatim": "Ontario, Canada",
"about_name_as_printed": "Brad Jackson"
}
],
"candidate_verdicts": [
{
"reason": "Residence Greater Toronto Area, Ontario matches; no conflicting identifier found",
"verdict": "consistent_unconfirmed",
"person_ref": "P1",
"found_value": "Greater Toronto Area, Canada",
"supplied_value": "Ontario, Canada",
"deciding_attribute": "residence_country",
"deciding_source_url": "https://www.linkedin.com/in/brad-jackson/",
"strong_identifier_match": false
}
]
}Results on public cases
| Name | What we supplied | Runs | What the agent returned |
|---|---|---|---|
| Gilbert Verdian | Born January 1978, British, lives in the United Kingdom | 2 | Both runs judged one person the same, on the date of birth in his UK Companies House record. Both kept a second Gilbert Verdian in France apart. |
| Gilbert Verdian | Born March 1990, lives in Canada, a profile that fits nobody | 1 | Nobody was judged the same person. The UK director was judged a different person because his date of birth conflicts. |
| Sergei Ivanov | Born 31 January 1953, Russian national | 1 | The agent judged the OFAC and EU sanctions entry born 31 January 1953 the same person. It judged the sanctioned man born 23 October 1980 a different person and left 7 LinkedIn profiles unconfirmed. |
| Sergei Ivanov | Born 23 October 1980, Russian national | 1 | The agent judged OFAC entry 34598, born 23 October 1980, the same person. It judged the men born on 2 June 1980 and 31 January 1953 different people. |
| Brad Jackson | Lives in Ontario, Canada | 2 | The runs found 19 and 15 people, most of them through LinkedIn. Six people per run live in Ontario and stay consistent but unconfirmed, because a province alone identifies nobody. |
Send the name and what you already hold
run = requests.post(f"{API}/{AGENT_ID}/runs", headers=H, json={"input": ( "Sergei Ivanov. Supplied by the investigator: born 31 January 1953, Russian national. " "Find every person with this name and judge each one against the supplied details." )}).json() # result["output"]["content"] holds: # attestations one row per value found, with its URL and the person it describes # candidate_verdicts one verdict per person, with the deciding attribute and page # identity_anchor the official record behind a same_person verdict # collection_gaps the registries and sites the agent could not reach