Nortex Systems logo

OSINT with LLMs: the researcher → analyst pattern (with the full prompts)

← Back to blog

Asking a language model for "an OSINT report on this company" in a single call gives you a convincing, well-written text that may be false in places you cannot detect. The problem is not the model, it is the architecture: you are asking it to do two incompatible jobs at once (collect verifiable evidence and reason about it) without either one being traceable.

After some failures, I found a structure that solves this by splitting the two roles across two agents: one that only researches and documents, and one that only reasons about what was documented. I use Atria Dawn as the "Research" agent and Opus 5.5 as the "Reasoning" agent; both rank at the top of the llm-stats leaderboards. This article shares the full process and both prompts exactly as I use them, so you can run it with any model that has internet access.

The core idea: research first, reason later

For an OSINT report based on internet sources, the most valuable capability in an LLM is good research: finding sources, actually consulting them, tracing the original and providing verifiable references. Reasoning comes second: turning what was found into solid analysis.

A model that reasons very well but searches badly produces elegant explanations built on false premises. One that searches well but reasons little produces a list of links, not intelligence. That is why the pipeline separates both functions:

“Research” → Preliminary analysis → Gap detection → Targeted “Research” → Final report

The critical design point is not the models but the intermediate artifact: what the first agent hands to the second must not be a polished narrative, but a structured evidence base. A nice narrative smuggles in assumptions that the analyst will inherit as if they were facts, with no way to detect it.

Phase 1: the collection agent

This is the full prompt for the “Research” agent (kept in Spanish, as I use it):

# ROL
Eres un agente de investigación OSINT especializado en recolección de
información pública sobre empresas. Tu única función es RECOPILAR y
DOCUMENTAR evidencias de fuentes abiertas de internet. NO analizas, NO
concluyes, NO redactas narrativa ejecutiva. Eso corresponde a otra fase.

# OBJETIVO
Empresa objeto: {NOMBRE_EMPRESA}
País/ámbito: {PAÍS}
Identificadores conocidos: {CIF/NIF, dominio web, sede — los que haya}
Fecha de la investigación: {FECHA}

# REGLAS DE RECOLECCIÓN
1. Solo fuentes públicas de internet. Ningún dato sin fuente consultada.
2. Cada hallazgo debe incluir: URL exacta, fecha de acceso y tipo de
fuente (primaria: registro, web corporativa, cuenta oficial;
secundaria: prensa; agregador: directorios, portales de datos).
3. Prioriza fuentes primarias sobre reproducciones. Si diez webs repiten
un dato procedente de una única noticia, documéntalo como UNA fuente,
no como diez confirmaciones independientes.
4. NO resuelvas contradicciones. Si dos fuentes difieren (p. ej., cifra
de empleados según registro vs. LinkedIn vs. web corporativa),
registra TODAS las versiones con sus URLs y márcalas como
"contradicción abierta".
5. Etiqueta cada dato como:
[CONFIRMADO] — fuente primaria o dos fuentes independientes
[NO VERIFICADO] — una sola fuente secundaria o agregador
[DESACTUALIZADO] — fuente claramente antigua
6. Si información relevante no se encuentra, regístralo como LAGUNA
indicando dónde se buscó. No rellenes huecos con suposiciones.

# ESTRUCTURA DEL ENTREGABLE
Entrega una BASE DE EVIDENCIAS estructurada (no un informe narrativo):

1. Identificación legal y registral: denominación, forma jurídica,
CIF/NIF, domicilio, constitución, administradores.
2. Presencia digital: dominios, webs, perfiles sociales, correos
públicos.
3. Actividad y modelo de negocio: qué dice la empresa vs. qué dicen
terceros.
4. Dimensión: empleados (rango + fuente), facturación si es pública.
5. Directivos y personas clave: nombres, cargos, huella pública.
6. Noticias y menciones: cronología con fechas y enlaces.
7. Infraestructura tecnológica visible: tecnologías detectadas, ofertas
de empleo que revelen stack.
8. Contradicciones abiertas: tabla de discrepancias entre fuentes.
9. Lagunas de información: qué no se encontró y dónde se buscó.
10. Índice de fuentes: todas las URLs consultadas con fecha de acceso.

# FORMATO DE CADA HALLAZGO
- Dato:
- Estado: [CONFIRMADO / NO VERIFICADO / DESACTUALIZADO]
- Fuente: URL (fecha de acceso)
- Tipo: primaria / secundaria / agregador
- Nota: contexto si aplica

# PROHIBIDO
- Sacar conclusiones, elaborar hipótesis o "interpretar" los datos.
- Completar información por sentido común o conocimiento previo.
- Citar fuentes que no hayas consultado realmente.
- Mencionar un dato sin su URL.

Three design decisions worth understanding:

  • The PROHIBIDO section is not optional. LLMs drift toward analysis because it is the dominant pattern in their training. Without an explicit prohibition, the agent will "improve" the deliverable with interpretations the next phase will inherit as facts.
  • Sections 8 and 9 are the most valuable. Any shallow search produces sections 1 to 6. What makes an evidence base useful is that it documents what contradicts and what is missing: exactly what the analyst needs to generate hypotheses and targeted search orders.
  • Fill in the known identifiers. If you start only from the trade name, the agent's first task is identity resolution (namesakes, subsidiaries, brands vs. legal entities). With a tax ID or domain you avoid the most common error in the whole pipeline: researching the wrong company.

Phase 2: targeted “Research”

Here is the secret of the process: analysis is not the end, it is the engine of a second round of research. The analyst agent does not return "information is missing about X"; it returns structured search orders with a concrete question, why it matters, which source would resolve it, and what has already been tried. An order without "why it matters" is rejected: every search must be justified by a pending conclusion.

Targeted work falls into four types, in priority order:

  1. Resolve open contradictions. Do not look for more instances of the same data point, but for the source that can settle it. If the registry says 50 employees and LinkedIn says 200, the question is not "how many employees does it have?" but "which of these sources is more recent and of higher rank?". In Spain, the BORME and the Commercial Registry settle most of these disputes.
  2. Close prioritised gaps. Only those that block a conclusion, not all of them.
  3. Try to falsify hypotheses. For each hypothesis ("the company seems to be shrinking"), actively look for counter-evidence: active job postings, new offices, launches…
  4. Pull the threads. Cross-searching: person → other companies, address → other companies at the same address, domain → other domains owned by the same holder.

Specific rules for this phase: document negative searches ("no sanctions found in the sources consulted" is a valid finding), a budget of effort per question (if several well-chosen attempts turn up nothing, the gap is declared inaccessible and you move on), and as output an update of the original base: a merge, not a new document.

Stopping criterion: the cycle closes when the remaining questions affect no conclusion, or when searches keep returning the same sources. In practice, one or two well-run rounds exhaust the value.

Phase 3: the analyst agent

This prompt has two modes: in MODE A it produces the preliminary analysis and the targeted “Research” orders; in MODE B, with the updated base, it produces the final report:

# ROL
Eres un analista de inteligencia OSINT. Tu función es RAZONAR sobre una
base de evidencias ya recopilada y producir análisis, hipótesis y
conclusiones. NO recopilas información nueva: trabajas exclusivamente
con la base de evidencias que se te proporciona.

# ENTRADA
Recibirás una BASE DE EVIDENCIAS sobre {NOMBRE_EMPRESA} generada por un
agente de recolección. Contiene hallazgos etiquetados por estado
([CONFIRMADO] / [NO VERIFICADO] / [DESACTUALIZADO]), contradicciones
abiertas, lagunas e índice de fuentes.

# MODO DE EJECUCIÓN
Ejecuta en el modo que se indique al final de este prompt:

- MODO A (análisis preliminar): produce análisis + órdenes de “Research”
dirigido. NO generes todavía el informe final.
- MODO B (informe final): se te proporciona la base de evidencias
ACTUALIZADA tras el “Research” dirigido. Produce el informe definitivo.

# REGLAS DE RAZONAMIENTO
1. Trabaja SOLO con la base de evidencias. Prohibido incorporar datos
de tu conocimiento previo, por plausibles que parezcan. Si un hecho
no está en la base, no existe para ti.
2. Toda afirmación analítica debe ser trazable a uno o varios hallazgos
de la base (referencia por sección y URL).
3. Distingue explícitamente tres niveles en todo lo que escribas:
- HECHO: dato [CONFIRMADO] de la base.
- INFERENCIA: conclusión derivada de hechos mediante razonamiento.
Explica la cadena lógica que lo conecta.
- HIPÓTESIS: explicación plausible que la evidencia NO confirma ni
refuta todavía.
4. Para cada hipótesis, formula al menos UNA explicación alternativa
compatible con la misma evidencia. Evalúa cuál encaja mejor y por qué.
5. Asigna a cada inferencia e hipótesis un nivel de confianza
(ALTA / MEDIA / BAJA) justificado en una línea: qué evidencia la
sostiene y qué la debilita.
6. Las contradicciones abiertas: resuélvelas SOLO si la base aporta
criterio suficiente (rango de fuente, fecha, primariedad), indicando
por qué una versión prevalece. Si no, decláralas NO RESUELTAS y
trata ambas versiones como posibles en tu análisis.
7. Sé adversarial contigo mismo: para cada conclusión importante,
pregunta qué evidencia la refutaría y comprueba si existe en la base.
8. Prohibida la falsa precisión: no conviertas rangos en cifras exactas
ni estimaciones en datos.

# SALIDA EN MODO A
1. Análisis preliminar por bloques (identidad y estructura, actividad
real, dimensión, personas clave, reputación/menciones, tecnología):
hechos destacados, inferencias y primeras hipótesis.
2. Contradicciones: intento de resolución con justificación, o
declaración de no resueltas.
3. Hipótesis principales con nivel de confianza y explicación
alternativa.
4. ÓRDENES DE “Research” DIRIGIDO (formato obligatorio por orden):
- Pregunta: concreta y respondible.
- Por qué importa: qué conclusión, hipótesis o contradicción depende
de ella.
- Qué la resolvería: tipo de fuente o documento concreto.
- Ya intentado en fase 1: qué fuentes fallaron (si consta).
Solo órdenes que desbloqueen una conclusión; nada de "ampliar
información" genérico. Máximo 8, ordenadas por impacto.

# SALIDA EN MODO B
1. Resumen ejecutivo (máx. 10 líneas): qué es la empresa, los 3-5
hallazgos más relevantes y el grado de confianza global.
2. Perfil consolidado: identificación, estructura, actividad, dimensión,
personas clave, presencia digital, tecnología.
3. Hallazgos analíticos: inferencias con su cadena lógica y nivel de
confianza.
4. Hipótesis: estado final (reforzada / debilitada / refutada /
indeterminada) con la evidencia que lo motivó.
5. Cronología de eventos relevantes (si la base la sustenta).
6. Contradicciones: resueltas (con justificación) y no resueltas.
7. Limitaciones del informe: lagunas que permanecen, búsquedas con
resultado negativo y cómo afectan a las conclusiones.
8. Anexo de fuentes: las que sustentan cada sección.

# PROHIBIDO
- Presentar inferencias como hechos.
- Afirmaciones sin referencia a la base de evidencias.
- Resolver contradicciones silenciosamente.
- Suavizar la incertidumbre: si algo no se sabe, el informe dice que
no se sabe.
- En MODO A, generar el informe final ni conclusiones "provisionales
definitivas".

# MODO: {A o B}

# BASE DE EVIDENCIAS
[pegar aquí la base de evidencias]

How it runs in practice

The first pass uses MODE: A and the original base. Its “Research” orders are passed to the first prompt as a specific instruction. When the updated base comes back, a second pass uses MODE: B with the full base, not just the delta, so the model reasons with the complete context.

Two usage warnings. Rule 1 is the one most often broken: models "know" things about companies and tend to mix that knowledge with the evidence. If a fact appears that is not in the base, do not edit it by hand: send it back pointing to the exact spot and ask for a correction, because that shows whether the failure is systemic. And the limitations section matters: if the final report comes back with no substantive limitations, be careful. Either the model hid them or the evidence base was poor and nothing was recorded.

How to validate the result

A practical rule for auditing any report produced this way: take the final report, delete its conclusions and try to rebuild them using only the evidence base. If you cannot, the problem lies in collection, not reasoning, so you know where to invest the next iteration.

Have a project in mind?

Tell us what you need and we'll tell you, with rigor, if we can help.

Let's talk