{"workflow":{"id":12506,"name":"Research organizations with GPT‑5, Gemini, CourtListener, LegiScan and OSINT web sources","views":160,"recentViews":0,"totalViews":160,"createdAt":"2026-01-06T00:06:19.017Z","description":"## Who is this for\n\nThis workflow is designed for researchers, investigators, and analysts who need to:\n- Build comprehensive profiles of organizations from public sources\n- Research court cases, legislation, and government documents related to companies\n- Verify company information across multiple authoritative databases\n- Conduct due diligence or competitive intelligence research\n\nIt's ideal for animal advocacy organizations researching factory farms and slaughterhouses, investigative journalists exposing animal cruelty, legal teams building cases against animal agriculture companies, and activists conducting corporate campaigns.\n\n## What it does\n\nThis multi-phase OSINT agent systematically researches organizations:\n1. **Discovery phase**: Searches multiple databases to find all relevant records\n   - CourtListener for federal and state court cases\n   - LegiScan for related legislation across all states\n   - DocumentCloud for government documents and reports\n   - Serper for web articles, news, and academic papers\n2. **Verification phase**: Confirms discovered records actually relate to the target company (not similar names)\n3. **Prioritization phase**: Scores and selects the most relevant items for deep analysis\n4. **Retrieval phase**: Fetches full text of selected court opinions, bills, and documents\n5. **Analysis phase**: Synthesizes findings into strategic insights\n6. **Verification phase**: Checks the final report against sources for accuracy\n\nThe workflow prevents false positives by verifying company name matches, domain connections, and jurisdiction consistency.\n\n## How to set up\n\n1. Import the workflow into your n8n instance\n2. Configure the required API credentials:\n   - **CourtListener API** for court case searches\n   - **LegiScan API** for legislation searches\n   - **Serper API** for web searches\n   - **Jina AI API** for article content extraction\n   - **OpenRouter API** for AI analysis\n3. Test with a well-known company to verify API connections\n4. Activate the workflow\n\n### Example usage\n\n```json\n{\n  \"companyName\": \"Tyson Foods\",\n  \"companyDomain\": \"tysonfoods.com\",\n  \"reportGoal\": \"Identify environmental violations, labor disputes, and regulatory actions in the past 5 years\"\n}\n```\n\n## Requirements\n\n- CourtListener API key (free tier available)\n- LegiScan API key\n- Serper API key\n- Jina AI API key\n- OpenRouter API key\n\n## How to customize\n\n- **Add data sources**: Integrate SEC filings, USDA inspection reports, EPA violations databases, or OSHA records\n- **Adjust verification criteria**: Modify the company matching logic for subsidiaries or DBAs (useful for tracking complex corporate structures in animal agriculture)\n- **Focus research scope**: Limit searches to specific jurisdictions or time periods relevant to your campaign\n- **Change output format**: Customize the final report structure for campaign briefings or legal filings\n- **Add export options**: Connect to document generation tools for formatted reports to share with coalition partners\n","workflow":{"id":"yhXwVT8BUhBcgUF55sIK8","meta":{"instanceId":"d0d0919ee2a246670c2a80cd2e44e3e0f7b3b2437f3e73af8501f9599a4a888b"},"name":"Research organizations using AI with public data sources and report generation","tags":[],"nodes":[{"id":"22b1ea36-fac4-426e-8cb8-e9b98178f823","name":"Court Listener Discovery","type":"n8n-nodes-base.httpRequestTool","position":[640,2080],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}","options":{"batching":{"batch":{"batchSize":1}}},"sendHeaders":true,"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","toolDescription":"=**Discovery Phase - Find ALL Court Cases**\n**Base URL:** https://www.courtlistener.com/api/rest/v4/\n**ALWAYS include full base URL in requests**\n\n## Search Endpoint (CORRECTED)\nhttps://www.courtlistener.com/api/rest/v4/search/?type=o&q={query}&page_size=20\n\n## Critical Parameters\n- **type=o** (opinions - most common)\n- **type=r** (RECAP docket documents)\n- **q={search terms}** (URL encode special characters)\n- **page_size=20** (API maximum)\n- **order_by=-score** (best matches first)\n- **court__jurisdiction=F** (F=federal, S=state, optional)\n\n## WORKING Discovery Search URLs\nCompany name searches:\nhttps://www.courtlistener.com/api/rest/v4/search/?type=o&q=cargill&page_size=20\nhttps://www.courtlistener.com/api/rest/v4/search/?type=o&q=\"cargill+meat\"&page_size=20\nhttps://www.courtlistener.com/api/rest/v4/search/?type=o&q=cargill+violation&page_size=20\n\nIssue/violation searches:\nhttps://www.courtlistener.com/api/rest/v4/search/?type=o&q=animal+welfare+cargill&page_size=20\nhttps://www.courtlistener.com/api/rest/v4/search/?type=o&q=environmental+violation+cargill&page_size=20\n\nDocket searches (different endpoint):\nhttps://www.courtlistener.com/api/rest/v4/dockets/?case_name__icontains=cargill&page_size=20\nhttps://www.courtlistener.com/api/rest/v4/dockets/?case_name__icontains=cargill&date_filed__gte=2020-01-01\n\n## Response Structure\n```json\n{\n  \"count\": 123,\n  \"next\": \"https://www.courtlistener.com/api/rest/v4/search/?page=2...\",\n  \"results\": [{\n    \"id\": 456789,  // CAPTURE THIS for retrieval phase\n    \"cluster_id\": 123456,  // Alternative ID for cluster retrieval\n    \"case_name\": \"NPPC v. Ross\",\n    \"absolute_url\": \"/opinion/456789/nppc-v-ross/\",  // Note: partial path\n    \"court\": \"Court of Appeals for the Ninth Circuit\",\n    \"date_filed\": \"2022-03-15\",\n    \"snippet\": \"...text preview with <mark>highlighted</mark> terms...\"\n  }]\n}","headerParameters":{"parameters":[{"name":"Accept","value":"application/json"}]}},"credentials":{"httpHeaderAuth":{"id":"ZfXzQhBFNaxjYbP6","name":"CourtListener Key"}},"retryOnFail":true,"typeVersion":4.2},{"id":"8d926fc2-7092-4fab-95a9-1615f2a30905","name":"Google Search Discovery","type":"@n8n/n8n-nodes-langchain.toolHttpRequest","position":[352,2080],"parameters":{"url":"https://google.serper.dev/{endpoint}","sendQuery":true,"sendHeaders":true,"specifyQuery":"model","authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","toolDescription":"=**Discovery Phase - Find ALL Legal Analysis & News**\n\nSearches Google for comprehensive coverage of the query. Cast wide net.\n\n## Endpoint Selection\nYou must specify one of these endpoints:\n- search (general web search) - for legal analysis, expert commentary\n- news (news articles) - for recent coverage, breaking developments\n- scholar (academic papers) - for law review articles\n\n## Query Parameters\n{\n  \"q\": \"search query\",           // REQUIRED\n  \"location\": \"United States\",   // optional\n  \"tbs\": \"qdr:y\"                 // optional time filter\n}\n\n## Time Parameters (tbs)\n- \"qdr:d\" (past day)\n- \"qdr:w\" (past week) \n- \"qdr:m\" (past month)\n- \"qdr:y\" (past year)\n\n## Discovery Examples\nsearch endpoint: {\"q\": \"prop 12 legal analysis\", \"tbs\": \"qdr:y\"}\nnews endpoint: {\"q\": \"prop 12 constitutional challenge\", \"tbs\": \"qdr:m\"}\nsearch endpoint: {\"q\": \"proposition 12 california farm\"}\nscholar endpoint: {\"q\": \"prop 12 dormant commerce clause\"}\n\n**In Discovery Phase:**\n- Use multiple search variations\n- Try different endpoints\n- Don't filter results yet\n- Find everything relevant for later prioritization","parametersHeaders":{"values":[{"name":"Content-Type","value":"application/json","valueProvider":"fieldValue"}]},"placeholderDefinitions":{"values":[{"name":"{endpoint}","description":"search - General web search \n\nnews - News articles \n\nscholar - Academic papers \n\npatents - Patent searches \n\nmaps - Location-based searches \n\nreviews - Business/product reviews"}]}},"credentials":{"httpHeaderAuth":{"id":"PmK8h96T6iczF7fT","name":"Serper API"}},"retryOnFail":true,"typeVersion":1.1},{"id":"3f3ac475-b844-45c0-8121-9d2664c08c05","name":"LegiScan Discovery","type":"n8n-nodes-base.httpRequestTool","position":[496,2080],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}","options":{"batching":{"batch":{"batchSize":1}}},"authentication":"genericCredentialType","genericAuthType":"httpQueryAuth","toolDescription":"=**Discovery Phase - Find ALL Related Legislation**\n\n**CRITICAL: ALWAYS use full base URL**\n**Base URL:** https://api.legiscan.com/\n**Every request MUST start with:** https://api.legiscan.com/?op=\n\n## Search Operation\nhttps://api.legiscan.com/?op=getSearch&state={state}&query={query}&year={year}\n\n## Parameters\n- state: ALL (searches all states) or specific state code (CA, TX, etc.)\n- query: search terms (URL encoded)\n- year: 1 (all years), 2 (current session), or specific year\n\n## CORRECT Discovery URLs\n✅ https://api.legiscan.com/?op=getSearch&state=ALL&query=prop%2012&year=2\n✅ https://api.legiscan.com/?op=getSearch&state=ALL&query=proposition%2012\n✅ https://api.legiscan.com/?op=getSearch&state=CA&query=farm%20animal%20confinement\n\n## WRONG (Missing base URL)\n❌ ?op=getSearch&state=ALL&query=prop%2012\n❌ getSearch&state=ALL&query=prop%2012\n\n## Response Structure\n{\n  \"status\": \"OK\",\n  \"searchresult\": {\n    \"summary\": {\"count\": 15},\n    \"0\": {\n      \"bill_id\": 1234567,\n      \"bill_number\": \"AB 123\",\n      \"title\": \"Farm Animal Confinement Standards\"\n    }\n  }\n}\n\n**In Discovery Phase:**\n- ALWAYS use state=ALL for comprehensive search\n- Try multiple search terms\n- Note bill_id for later retrieval\n- Don't get full text yet"},"credentials":{"httpQueryAuth":{"id":"Lx8WUa2pIjcSpWJx","name":"Legiscan Key"}},"retryOnFail":true,"typeVersion":4.2},{"id":"345d1e45-5f9e-4ade-b718-8459e12997f5","name":"DocumentCloud Dsicovery","type":"n8n-nodes-base.httpRequestTool","position":[784,2080],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}","options":{"batching":{"batch":{"batchSize":1}}},"toolDescription":"=**Discovery Phase - Find ALL Government Documents**\n\n**Base URL:** https://api.www.documentcloud.org/api/\n**Search Endpoint:** documents/search/\n\n## Full Search URL Pattern\nhttps://api.www.documentcloud.org/api/documents/search/?q={query}&per_page=25\n\n## Query Parameters\n- q: search terms (URL encoded)\n- per_page: up to 25\n- created_at__gte: date filter (YYYY-MM-DD)\n\n## Discovery Search URLs\nhttps://api.www.documentcloud.org/api/documents/search/?q=prop%2012&per_page=25\nhttps://api.www.documentcloud.org/api/documents/search/?q=proposition%2012%20california&per_page=25\nhttps://api.www.documentcloud.org/api/documents/search/?q=CDFA%20enforcement&per_page=25\n\n## Response Structure\n{\n  \"results\": [{\n    \"id\": \"23456789\",\n    \"slug\": \"cdfa-inspection-report\",  // CRITICAL: Save this for text retrieval\n    \"title\": \"CDFA Prop 12 Inspection Report\",\n    \"page_count\": 45,\n    \"canonical_url\": \"https://www.documentcloud.org/documents/23456789\"\n  }]\n}\n\n**CRITICAL for later retrieval:**\n- Save both \"id\" and \"slug\" fields\n- These are needed to construct text retrieval URL in Phase 3\n- canonical_url is for reference, not for text retrieval\n\n**In Discovery Phase:**\n- Search broadly with multiple terms\n- Save id AND slug for each document\n- Don't retrieve text yet"},"retryOnFail":true,"typeVersion":4.2},{"id":"7b157bae-b0c3-4ebc-8d8e-dee5d8066165","name":"Court Listener Retrieveal","type":"n8n-nodes-base.httpRequestTool","position":[2704,2176],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}","options":{"batching":{"batch":{"batchSize":1}}},"sendHeaders":true,"authentication":"genericCredentialType","genericAuthType":"httpHeaderAuth","toolDescription":"=**Retrieval Phase - Get Full Opinion Text**\nBase URL: https://www.courtlistener.com/api/rest/v4/\nYour job: Retrieve ONLY opinions Agent 2 selected. NO NEW SEARCHES.\n\nCORRECT URL CONSTRUCTION:\nFor opinions:\nhttps://www.courtlistener.com/api/rest/v4/opinions/{opinion_id}/?fields=plain_text,html_with_citations,case_name,absolute_url\n\nFor clusters (opinion clusters):\nhttps://www.courtlistener.com/api/rest/v4/clusters/{cluster_id}/?fields=case_name,docket,date_filed,absolute_url\n\nFor dockets:\nhttps://www.courtlistener.com/api/rest/v4/dockets/{docket_id}/?fields=case_name,absolute_url,date_filed,court\n\nCRITICAL FIXES:\n1. **Add trailing slash before query params**: `/opinions/{id}/` not `/opinions/{id}`\n2. **Include absolute_url field**: This gives the human-readable URL for citations\n3. **Use proper field names**: \n   - `plain_text` for full opinion text\n   - `html_with_citations` for formatted version\n   - `absolute_url` for the web URL to cite\n\nExample WORKING URL:\nhttps://www.courtlistener.com/api/rest/v4/opinions/4296807/?fields=plain_text,html_with_citations,case_name,absolute_url\n\nResponse will contain:\n- plain_text: Full opinion text\n- html_with_citations: HTML formatted text\n- case_name: Case title\n- absolute_url: The actual web URL for citations (e.g., https://www.courtlistener.com/opinion/4296807/case-name/)\n- date_filed: Filing date\n\nIMPORTANT: Always include `absolute_url` in fields to get the citable web URL!","headerParameters":{"parameters":[{"name":"Accept","value":"application/json"}]}},"credentials":{"httpHeaderAuth":{"id":"ZfXzQhBFNaxjYbP6","name":"CourtListener Key"}},"retryOnFail":true,"typeVersion":4.2},{"id":"26b113c5-43b3-41a9-b828-a801a8a51118","name":"Think Tool Prioritization","type":"@n8n/n8n-nodes-langchain.toolThink","position":[1824,2144],"parameters":{"description":"=FOR EACH DISCOVERED ITEM, CONDUCT THESE VERIFICATION CHECKS:\n\n1. Company Name Match?\n   - Does the company name exactly match or is it a verified subsidiary/DBA?\n   - If similar name, is this actually a different company?\n   - Are alternate names/trade names consistent?\n\n2. Domain/Digital Match?\n   - Does it link to/from the primary domain (companyDomain)?\n   - Are SSL certificates/WHOIS data consistent?\n   - Do social profiles cross-reference the main domain?\n\n3. Jurisdiction/Location Match?\n   - Does the jurisdiction match known corporate registrations?\n   - Are office locations consistent with corporate records?\n   - If court case, is it in a jurisdiction where company operates?\n\n4. Industry/Business Match?\n   - Does the business model match the target company?\n   - Does the industry classification align?\n   - Are products/services consistent with known offerings?\n   - Do technology stacks align with known infrastructure?\n\n5. Red Flags?\n   - Different industry entirely?\n   - No connection to primary domain?\n   - Incompatible founding date?\n   - Wrong corporate structure (LLC vs Inc)?\n   - Dissolved/inactive status?\n   - Personal entity not corporate?\n\nVERDICT: \n- CONFIRMED SAME COMPANY (100% confidence)\n- LIKELY SAME COMPANY (high confidence)\n- UNCERTAIN (cannot determine)\n- DIFFERENT COMPANY (exclude)\n\nIf CONFIRMED, then evaluate relevance to report goal:\n- Do"},"typeVersion":1},{"id":"aecb4b98-85b5-4384-bd39-55852d6632ba","name":"LegiScan Retrieval","type":"n8n-nodes-base.httpRequestTool","position":[2576,2176],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}","options":{"batching":{"batch":{"batchSize":1}}},"authentication":"genericCredentialType","genericAuthType":"httpQueryAuth","toolDescription":"=**Retrieval Phase - Get Full Bill Text**\n\nBase URL: https://api.legiscan.com/\nCRITICAL: ALWAYS use full URL!\n\nYour job: Retrieve ONLY bills Agent 2 selected. NO NEW SEARCHES.\n\nBill Retrieval URL:\n✅ https://api.legiscan.com/?op=getBill&id={bill_id}\n❌ ?op=getBill&id={bill_id} (WRONG - missing base URL!)\n\nExample:\nhttps://api.legiscan.com/?op=getBill&id=1234567\n\nResponse contains:\n{\n  \"bill\": {\n    \"bill_id\": 1234567,\n    \"title\": \"Full title\",\n    \"description\": \"Summary\",\n    \"sponsors\": [...],\n    \"texts\": [{\"doc_id\": 890, \"type\": \"Introduced\", \"url\": \"...\"}],\n    \"history\": [...],\n    \"votes\": [...]\n  }\n}\n\nTo get actual text:\nhttps://api.legiscan.com/?op=getBillText&id={doc_id}\n\nInclude full bill text and metadata for Agent 4."},"credentials":{"httpQueryAuth":{"id":"Lx8WUa2pIjcSpWJx","name":"Legiscan Key"}},"retryOnFail":true,"typeVersion":4.2},{"id":"610dd29c-86f5-4c4f-8d5c-bfaa2cc48033","name":"DocumentCloud Retrieval","type":"n8n-nodes-base.httpRequestTool","position":[2832,2176],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}","options":{"batching":{"batch":{"batchSize":1}}},"toolDescription":"=**Retrieval Phase - Get Document Full Text**\n\nBase URL: https://s3.documentcloud.org/\n\nYour job: Retrieve text for ONLY documents Agent 2 selected.\n\nCRITICAL URL PATTERN:\nhttps://s3.documentcloud.org/documents/{id}/{slug}.txt.json\n\nALWAYS INCLUDE THE SLASHES!\n\n✅ CORRECT: https://s3.documentcloud.org/documents/789123/report.txt.json\n❌ WRONG: https://s3.documentcloud.org/documents/789123-report.txt.json\n\nConstruction:\n1. Take ID from Agent 2: \"789123\"\n2. Take slug from Agent 2: \"usda-report\"\n3. Build full URL: https://s3.documentcloud.org/documents/789123/usda-report.txt.json\n\nResponse:\n{\n  \"pages\": [\n    {\"page\": 0, \"contents\": \"Full text of page 1...\"},\n    {\"page\": 1, \"contents\": \"Full text of page 2...\"}\n  ]\n}"},"retryOnFail":true,"typeVersion":4.2},{"id":"8f1abed0-ca70-4735-82bf-64cc701c4239","name":"Jina URL Text Extraction","type":"n8n-nodes-base.jinaAiTool","position":[2448,2176],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}","options":{},"requestOptions":{},"descriptionType":"manual","toolDescription":"=**Retrieval Phase - Extract Article Content**\n\nYour job: Get full text from ONLY URLs Agent 2 selected.\n\nSimply pass each prioritized URL:\nhttps://example.com/legal-analysis-article\n\nJina will:\n- Extract main content\n- Remove ads, navigation\n- Return clean text\n- Include title, author, date\n\nOutput: Complete article text for Agent 4's analysis.\n\nNo searching - only extract from Agent 2's selected URLs."},"credentials":{"jinaAiApi":{"id":"6Grs8YZjZxafzxAm","name":"Jina AI account"}},"retryOnFail":true,"typeVersion":1},{"id":"44551c96-363b-42c4-8626-9b0f5894bad2","name":"Think Tool Analysis","type":"@n8n/n8n-nodes-langchain.toolThink","position":[4320,1888],"parameters":{"description":"=**Analysis Phase - Synthesize All Retrieved Texts**\n\nYour job: Analyze retrieved content to create strategic insights.\n\nRequired Analysis:\n1. Map findings to user query:\n   \"User asked about Prop 12 challenges\"\n   \n2. Identify patterns:\n   \"Pattern: All constitutional challenges have failed\"\n   \"Pattern: Enforcement increasing in 2024\"\n   \n3. Note contradictions:\n   \"9th Circuit upheld, but 6th Circuit questioning\"\n   \n4. Identify gaps:\n   \"No enforcement data after July 2024\"\n   \n5. Develop insights:\n   \"Legal challenges exhausted, focus shifting to compliance\"\n   \n6. Form recommendations:\n   \"Monitor state-level adoption rather than federal challenges\"\n\nFocus on:\n- Connecting dots between sources\n- Finding non-obvious patterns\n- Creating actionable intelligence\n\nThis shapes the final strategic report - think deeply!"},"typeVersion":1},{"id":"cc041ea4-0d5a-400a-b188-ad86a34b306c","name":"Structured Output Parser","type":"@n8n/n8n-nodes-langchain.outputParserStructured","position":[5040,1904],"parameters":{"autoFix":true,"schemaType":"manual","inputSchema":"{\n  \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n  \"title\": \"Verification Report\",\n  \"type\": \"object\",\n  \"required\": [\"contains_hallucinations\", \"hallucinations\", \"summary\"],\n  \"properties\": {\n    \"contains_hallucinations\": {\n      \"type\": \"boolean\",\n      \"description\": \"True if ANY critical factual claim is not supported by retrieved documents\"\n    },\n    \"hallucinations\": {\n      \"type\": \"array\",\n      \"description\": \"List of specific unsupported claims\",\n      \"items\": {\n        \"type\": \"object\",\n        \"required\": [\"exact_text\", \"issue_type\", \"severity\"],\n        \"properties\": {\n          \"exact_text\": {\n            \"type\": \"string\",\n            \"description\": \"The EXACT text from the report that is unsupported\"\n          },\n          \"issue_type\": {\n            \"type\": \"string\",\n            \"enum\": [\"unsupported_number\", \"unsupported_date\", \"false_quote\", \"missing_entity\", \"unsupported_event\", \"unsupported_claim\"],\n            \"description\": \"Category of hallucination\"\n          },\n          \"severity\": {\n            \"type\": \"string\",\n            \"enum\": [\"critical\", \"moderate\", \"minor\"],\n            \"description\": \"How problematic this hallucination is\"\n          },\n          \"searched_in\": {\n            \"type\": \"string\",\n            \"description\": \"Which documents were checked for this claim\"\n          }\n        }\n      }\n    },\n    \"summary\": {\n      \"type\": \"string\",\n      \"description\": \"Brief summary - either 'All factual claims verified' or '3 critical hallucinations found: [list]'\"\n    }\n  }\n}"},"typeVersion":1.3},{"id":"3722ea4b-9374-4b5c-804f-b7ae19f3a8bb","name":"If hallucinations present","type":"n8n-nodes-base.if","position":[5456,1648],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"3ac4aa73-45ff-4140-90d6-58cb115f069c","operator":{"type":"boolean","operation":"true","singleValue":true},"leftValue":"={{ $json.output.contains_hallucinations }}","rightValue":""},{"id":"e8b43be4-9505-4861-b915-801b10c87c06","operator":{"type":"number","operation":"lt"},"leftValue":"={{ $runIndex }}","rightValue":4}]}},"typeVersion":2.2},{"id":"0cf05250-2d45-4dcf-8217-bc86cc0bd83e","name":"Set Report","type":"n8n-nodes-base.set","position":[4768,1648],"parameters":{"options":{},"assignments":{"assignments":[{"id":"0381fedf-0f65-4435-bd6f-197614916315","name":"Final Report","type":"string","value":"={{ $json.output }}"},{"id":"e68ea8cd-497f-4734-8581-912436d883fe","name":"Retrieved Documents","type":"string","value":"={{\n  (() => {\n    const steps = $('Investigating Sources Further').item.json.intermediateSteps;\n    if (!steps || !Array.isArray(steps)) return 'No retrieval data available';\n    \n    // First pass: extract essential info from n8n LangChain structure\n    const cleanedData = steps.map((step, index) => {\n      const observation = step.observation || 'No response';\n      return {\n        step: index + 1,\n        tool: step.action?.tool || 'Unknown Tool',\n        input: step.action?.toolInput || {},\n        response: observation\n      };\n    }).filter(step => step.response && step.response !== 'No response');\n    \n    // Calculate per-response limit based on number of responses\n    const totalMaxLength = 400000; // Total character budget (~100k tokens)\n    const responseCount = cleanedData.length;\n    const overheadPerResponse = 200; // Estimate for step, tool, input fields\n    const totalOverhead = responseCount * overheadPerResponse;\n    const availableForResponses = totalMaxLength - totalOverhead;\n    \n    // Dynamic per-response limit (min 1000 chars, max 50000 chars per response)\n    const perResponseLimit = Math.min(\n      50000, \n      Math.max(1000, Math.floor(availableForResponses / responseCount))\n    );\n    \n    // Truncate individual responses if needed\n    const truncatedData = cleanedData.map(step => {\n      let response = step.response;\n      \n      // Convert to string if needed\n      if (typeof response !== 'string') {\n        response = JSON.stringify(response, null, 1);\n      }\n      \n      // Truncate if too long\n      if (response.length > perResponseLimit) {\n        response = response.substring(0, perResponseLimit) + \n          `\\n... [TRUNCATED from ${response.length} to ${perResponseLimit} chars]`;\n      }\n      \n      return {\n        ...step,\n        response: response.trim()\n      };\n    });\n    \n    // Final safety check on total size\n    let finalStr = JSON.stringify(truncatedData, null, 1);\n    if (finalStr.length > totalMaxLength) {\n      // If still too big, be more aggressive with largest responses\n      const sorted = [...truncatedData].sort((a, b) => \n        b.response.length - a.response.length\n      );\n      \n      // Truncate the largest responses more aggressively\n      for (let i = 0; i < Math.min(5, sorted.length); i++) {\n        const newLimit = Math.floor(perResponseLimit * 0.5);\n        if (sorted[i].response.length > newLimit) {\n          sorted[i].response = sorted[i].response.substring(0, newLimit) + \n            `\\n... [FURTHER TRUNCATED to ${newLimit} chars]`;\n        }\n      }\n      \n      // Re-sort by original order\n      truncatedData.sort((a, b) => a.step - b.step);\n      finalStr = JSON.stringify(truncatedData, null, 1);\n    }\n    \n    return finalStr;\n  })()\n}}"}]}},"typeVersion":3.4},{"id":"f3c87e09-530a-48ac-9db4-fe5e7ebc438e","name":"Retry if Tools Not Used","type":"n8n-nodes-base.if","position":[912,1584],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"9bc6faa2-c596-4d24-8e2f-6f7888987d29","operator":{"type":"object","operation":"empty","singleValue":true},"leftValue":"={{ $json.intermediateSteps[0] }}","rightValue":""},{"id":"2aa597be-e115-4022-8abc-99909f29fd83","operator":{"type":"number","operation":"lt"},"leftValue":"={{ $runIndex }}","rightValue":4}]}},"typeVersion":2.2},{"id":"5a80d647-0baa-47a2-a626-fdc463500012","name":"Retry if Tools Not Used1","type":"n8n-nodes-base.if","position":[2960,1616],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"9bc6faa2-c596-4d24-8e2f-6f7888987d29","operator":{"type":"object","operation":"empty","singleValue":true},"leftValue":"={{ $json.intermediateSteps[0] }}","rightValue":""},{"id":"2aa597be-e115-4022-8abc-99909f29fd83","operator":{"type":"number","operation":"lt"},"leftValue":"={{ $runIndex }}","rightValue":4}]}},"typeVersion":2.2},{"id":"c4c5adc7-607a-4453-a43c-1b6a5c6ec684","name":"Retry if Response Empty","type":"n8n-nodes-base.if","position":[1760,1600],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"9bc6faa2-c596-4d24-8e2f-6f7888987d29","operator":{"type":"string","operation":"empty","singleValue":true},"leftValue":"={{ $json.output }}","rightValue":""},{"id":"2aa597be-e115-4022-8abc-99909f29fd83","operator":{"type":"number","operation":"lt"},"leftValue":"={{ $runIndex }}","rightValue":4}]}},"typeVersion":2.2},{"id":"6bf0f59b-aa39-4dae-9a0b-b1176d9c4636","name":"Retry if Response Empty1","type":"n8n-nodes-base.if","position":[4416,1632],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"9bc6faa2-c596-4d24-8e2f-6f7888987d29","operator":{"type":"string","operation":"empty","singleValue":true},"leftValue":"={{ $json.output }}","rightValue":""},{"id":"2aa597be-e115-4022-8abc-99909f29fd83","operator":{"type":"number","operation":"lt"},"leftValue":"={{ $runIndex }}","rightValue":4}]}},"typeVersion":2.2},{"id":"d25cfb1f-9088-46f5-a5e3-fd924e96858c","name":"Auto Fallback","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[208,2080],"parameters":{"model":"openrouter/auto","options":{"temperature":0.7}},"credentials":{"openRouterApi":{"id":"0O2pZBHvY0Zv6I48","name":"Organization OSINT Agent"}},"typeVersion":1},{"id":"ebe28b9c-779e-478f-bb83-8b2a60e1b255","name":"Gemini 2.5 Flash","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[64,2080],"parameters":{"model":"google/gemini-2.5-flash","options":{"temperature":0.7}},"credentials":{"openRouterApi":{"id":"0O2pZBHvY0Zv6I48","name":"Organization OSINT Agent"}},"typeVersion":1},{"id":"6e9ec3bf-26bc-4575-99f4-00aa6972bcb3","name":"Auto Fallback1","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[1632,2144],"parameters":{"model":"openrouter/auto","options":{"temperature":0.3}},"credentials":{"openRouterApi":{"id":"0O2pZBHvY0Zv6I48","name":"Organization OSINT Agent"}},"typeVersion":1},{"id":"193f24f2-1e74-4e79-b043-fb70e8691229","name":"Auto Fallback2","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[2288,2176],"parameters":{"model":"openrouter/auto","options":{"temperature":0.2}},"credentials":{"openRouterApi":{"id":"0O2pZBHvY0Zv6I48","name":"Organization OSINT Agent"}},"typeVersion":1},{"id":"6e7b894a-057e-4b0a-b395-ffac0fd59569","name":"Gemini 2.5 Flash2","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[2144,2176],"parameters":{"model":"google/gemini-2.5-flash","options":{"temperature":0.2}},"credentials":{"openRouterApi":{"id":"0O2pZBHvY0Zv6I48","name":"Organization OSINT Agent"}},"typeVersion":1},{"id":"abb13953-f0ea-4ea9-aa8c-1f08ab5df0a2","name":"Auto Fallback3","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[4160,1888],"parameters":{"model":"openrouter/auto","options":{"temperature":0.6}},"credentials":{"openRouterApi":{"id":"0O2pZBHvY0Zv6I48","name":"Organization OSINT Agent"}},"typeVersion":1},{"id":"1799e252-aba0-4198-b4a6-daf004b9df70","name":"Auto Fallback4","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[4912,1904],"parameters":{"model":"openrouter/auto","options":{"temperature":0.2}},"credentials":{"openRouterApi":{"id":"0O2pZBHvY0Zv6I48","name":"Organization OSINT Agent"}},"typeVersion":1},{"id":"ce5d58d7-23b0-42a4-85d1-508a20334be5","name":"Auto Fallback5","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[5728,1920],"parameters":{"model":"openrouter/auto","options":{"temperature":0.1}},"credentials":{"openRouterApi":{"id":"0O2pZBHvY0Zv6I48","name":"Organization OSINT Agent"}},"typeVersion":1},{"id":"8df2a24c-c717-42aa-9aa9-5a7df55c53aa","name":"Step 6: Fixing Hallucinations","type":"@n8n/n8n-nodes-langchain.agent","position":[5680,1648],"parameters":{"text":"=Current Date & Time: {{ $now }}\n\n# **User's Original Query**\n\nCompany Name: {{ $('Set Prompt').item.json.companyName }}\nPrimary Domain: {{ $('Set Prompt').item.json.companyDomain }}\nReport Goal: {{ $('Set Prompt').item.json.reportGoal }}\n\n# **Retrieved Documents** - All full texts with their source URLs\n\n{{ \n  (() => {\n    const docs = JSON.stringify($('Investigating Sources Further').item.json.intermediateSteps);\n    // 1.6M chars (~400K tokens) - this is your main content\n    return docs.length > 1600000 ? docs.slice(0, 1600000) + '\\n... [TRUNCATED]' : docs;\n  })()\n}}\n\n# **Failed Report** - The report that contains hallucinations\n\n{{ \n  (() => {\n    const report = $('Set Report').item.json['Final Report'] || '';\n    // 800K chars (~200K tokens) - full report should fit\n    return report.length > 800000 ? report.substring(0, 800000) + '\\n... [TRUNCATED]' : report;\n  })()\n}}\n\n# **Hallucinations** - FIX THESE PROBLEMS\n\n{{ \n  (() => {\n    const h = JSON.stringify($json.output.hallucinations, null, 2);\n    // 80K chars (~20K tokens) - comprehensive hallucination list\n    return h.length > 80000 ? h.slice(0, 80000) + '\\n... [TRUNCATED]' : h;\n  })()\n}}","options":{"maxIterations":10,"systemMessage":"=# 📝 ORGANIZATION OSINT REPORT REWRITE AGENT\n\n## Mission\nFix the specific hallucinations identified while **preserving everything valuable about the report**. The original report was written to be responsive to the user's specific query - maintain that responsiveness. Your job is surgical correction, not reconstruction.\n\n\n## CRITICAL: Automated System Instructions\n\n**YOU ARE PART OF AN AUTOMATED PIPELINE. This is a ONE-SHOT report generation with NO follow-up possible.**\n\n### Absolute Requirements:\n- You CANNOT interact with the user after this report\n- You CANNOT ask questions or request clarification  \n- You CANNOT offer to do additional research or analysis\n- You MUST produce a complete, final report right now\n- You MUST work with whatever information you have\n\n### NEVER write phrases like:\n- \"Would you like me to...\"\n- \"I can also look into...\"\n- \"Let me know if you need...\"\n- \"Feel free to ask for...\"\n- \"I could further analyze...\"\n- \"If you want more detail on...\"\n- \"Should you need additional...\"\n- \"I'm happy to explore...\"\n- \"Would you prefer...\"\n- \"Shall I continue with...\"\n\n### INSTEAD:\n- Write a complete, self-contained report\n- Include all relevant analysis in THIS response\n- Make definitive statements and recommendations\n- Provide all insights you can generate NOW\n- Present findings as final deliverables\n\n### CITATION REQUIREMENTS:\n- **EVERY factual claim must include its source**\n- **ALWAYS include the full URL** when available\n- **Use inline citations** with [Source: URL] AND footnotes\n- **Never make unsourced claims** about verifiable facts\n- **If multiple sources support a claim**, cite all relevant ones\n\n### COMPREHENSIVENESS PRINCIPLE:\n**Create a LONG, DETAILED report with MOST IMPORTANT findings at the top**\n- **Executive Summary first** with key findings and recommendations\n- **Include ALL relevant information** from retrieved documents\n- **Don't summarize or condense** - be exhaustive with details\n- **Use extensive quotes** from source materials\n- **Provide complete analysis** of every relevant aspect\n- **Length is NOT a concern** - thoroughness is paramount\n- **Organize by importance** - critical findings first, supporting details follow\n- **Extract maximum value** from every document retrieved\n\n**This is your ONLY opportunity to provide value to the user. Make the report comprehensive, detailed, and complete. The user would rather have too much information than too little.**\n\n\n## CRITICAL PRINCIPLES\n\n### 1. THE REPORT'S VALUE COMES FROM ITS ANALYSIS\n- **Strategic insights are the point** - Never remove these\n- **Campaign recommendations are essential** - Keep all of them\n- **Vulnerability assessments are core value** - Preserve entirely\n- **Pattern recognition is intelligence work** - Maintain it all\n\n### 2. RESPECT THE ORIGINAL STRUCTURE\n- **The writer adapted to the user's query** - Don't impose a template\n- **The order was chosen for relevance** - Keep it\n- **Sections were named for clarity** - Don't standardize them\n- **Some parts were emphasized intentionally** - Preserve emphasis\n\n### 3. MINIMAL INTERVENTION PHILOSOPHY\n- **Only fix what's specifically flagged as wrong**\n- **Keep everything else exactly as written**\n- **Don't \"improve\" things that aren't broken**\n- **Preserve the original voice and flow**\n\n## HOW TO HANDLE FLAGGED HALLUCINATIONS\n\n### Read Each Hallucination Carefully\nBefore fixing anything, understand:\n- What specific claim is wrong?\n- Is it completely false or just imprecise?\n- What was the analytical point being made?\n- Can the point survive without this claim?\n\n### Choose the Lightest Touch That Works\n\n**1. ADJUST PRECISION** (First choice)\n- \"5,247 employees\" → \"approximately 5,000 employees\"\n- \"Founded in March 2019\" → \"Founded in 2019\"\n- \"$47.3M revenue\" → \"$10-50M revenue\" (if BuiltWith shows this)\n- \"37% market share\" → \"significant market share\"\n\n**2. ADD QUALIFIER** (When adjustment isn't enough)\n- \"Has violated...\" → \"Reportedly has violated...\"\n- \"CEO stated...\" → \"CEO reportedly stated...\"\n- \"Uses AWS exclusively\" → \"Appears to use AWS\"\n- \"Will expand to...\" → \"Plans suggest expansion to...\"\n\n**3. CONVERT TO ANALYSIS** (When fact is unsupported but insight is valid)\n- \"Has 5 facilities\" → \"Operations suggest multiple facilities\"\n- \"Spent $10M on...\" → \"Investment patterns indicate significant spending on...\"\n- \"Partners with X\" → \"Technology stack suggests partnership with X\"\n\n**4. REMOVE** (Only when absolutely necessary)\n- Only if completely fabricated AND\n- The point can't be made another way AND\n- Removal doesn't break the flow\n\n### Preserve the Analytical Value\n\nIf a hallucination supported a valid strategic point:\n- Find another way to make that point\n- Use available evidence differently\n- Reframe as assessment rather than fact\n- Keep the strategic conclusion even if the supporting fact changes\n\n## WHAT TO NEVER CHANGE\n\n### Protected Content - Don't Touch These:\n\n**Strategic Sections:**\n- Campaign recommendations\n- Vulnerability assessments\n- Pressure point analysis\n- Coalition opportunities\n- Messaging strategies\n- Tactical approaches\n\n**Analytical Content:**\n- \"This suggests...\"\n- \"Analysis indicates...\"\n- \"Pattern shows...\"\n- \"Evidence points to...\"\n- \"Strategic opportunity exists...\"\n- \"Campaign could leverage...\"\n\n**Structural Elements:**\n- The user-responsive organization\n- Section headers (even if non-standard)\n- Emphasis and priorities\n- Executive summary focus\n- Conclusion and recommendations\n\n**Qualitative Assessments:**\n- Market position evaluations\n- Competitive analysis\n- Risk assessments\n- Opportunity identification\n- Stakeholder mapping\n\n## PRACTICAL EXAMPLES\n\n### Hallucination: \"Company has 5,000 employees\"\n**If sources show 4,800:** Just leave it - close enough\n**If sources show \"large workforce\":** Change to \"large workforce\"\n**If sources show nothing:** Change to \"workforce size unclear from available data\"\n**If analyzing organizing potential:** Keep the analysis even if you modify the number\n\n### Hallucination: \"FDA issued warning in March 2023\"\n**If FDA issued warning in May 2023:** Adjust to \"FDA issued warning in 2023\"\n**If FDA issued violation, not warning:** Adjust to \"FDA issued violation in 2023\"\n**If no FDA action found:** Remove sentence but keep any analysis about regulatory pressure\n\n### Hallucination: \"Revenue of $47.3M\"\n**If BuiltWith shows $10-50M:** Change to \"$10-50M per BuiltWith\"\n**If sources suggest \"mid-market\":** Change to \"mid-market revenue tier\"\n**If no revenue data:** Remove number but keep analysis about financial position\n\n## REWRITE PROCESS\n\n1. **Read the full report first** - Understand its purpose and flow\n2. **Review what the user originally asked for** - Ensure fixes maintain responsiveness\n3. **Address only flagged hallucinations** - Don't fix what isn't broken\n4. **Use lightest touch possible** - Adjust > Qualify > Convert > Remove\n5. **Preserve all analysis** - This is the report's value\n6. **Maintain original structure** - It was adapted to user needs\n7. **Keep the same tone and voice** - Don't formalize informal writing\n\n## OUTPUT RULES\n\n### Start Immediately\n- No preamble about what you're doing\n- No explanation of changes made\n- Just output the corrected report\n\n### Maintain Everything Valuable\n- All strategic insights\n- All campaign recommendations  \n- All vulnerability assessments\n- All analytical frameworks\n- All actionable intelligence\n\n### Format Preservation\n- Keep the original section structure\n- Maintain the same headers\n- Preserve the emphasis patterns\n- Keep the same level of detail\n- Maintain source citation style\n\n## CRITICAL REMINDERS\n\n1. **You're a corrector, not a rewriter** - Minimal changes only\n2. **Analysis is sacred** - Never remove strategic insights\n3. **Structure was chosen for a reason** - Don't standardize it\n4. **The report answered a specific query** - Keep it responsive\n5. **Campaign value is paramount** - Preserve all actionable intelligence\n6. **When in doubt, keep it** - Better to leave marginal content than remove value\n\n## FINAL INSTRUCTION\n\nOutput the corrected report immediately. Fix ONLY the specific hallucinations identified. Preserve everything else exactly as written, including all analysis, recommendations, structure, and strategic insights. The goal is a report that's accurate but retains all its original intelligence value and responsiveness to the user's query.\n\nRemember: A report full of strategic insights, vulnerability analysis, and campaign recommendations is doing exactly what it should do. Your job is to fix factual errors while preserving all that value.","returnIntermediateSteps":true},"promptType":"define","needsFallback":true},"retryOnFail":true,"typeVersion":2.2},{"id":"942b76f1-9d0d-4112-9040-830c62e8b872","name":"Think Tool Analysis2","type":"@n8n/n8n-nodes-langchain.toolThink","position":[5904,1920],"parameters":{"description":"=**Analysis Phase - Synthesize All Retrieved Texts**\n\nYour job: Analyze retrieved content to create strategic insights.\n\nRequired Analysis:\n1. Map findings to user query:\n   \"User asked about Prop 12 challenges\"\n   \n2. Identify patterns:\n   \"Pattern: All constitutional challenges have failed\"\n   \"Pattern: Enforcement increasing in 2024\"\n   \n3. Note contradictions:\n   \"9th Circuit upheld, but 6th Circuit questioning\"\n   \n4. Identify gaps:\n   \"No enforcement data after July 2024\"\n   \n5. Develop insights:\n   \"Legal challenges exhausted, focus shifting to compliance\"\n   \n6. Form recommendations:\n   \"Monitor state-level adoption rather than federal challenges\"\n\nFocus on:\n- Connecting dots between sources\n- Finding non-obvious patterns\n- Creating actionable intelligence\n\nThis shapes the final strategic report - think deeply!"},"typeVersion":1},{"id":"d4b472af-7e48-46f5-85c0-8b83ae12eab0","name":"Search Open Paws Database2","type":"@n8n/n8n-nodes-langchain.vectorStoreWeaviate","position":[1056,2032],"parameters":{"mode":"retrieve-as-tool","topK":10,"options":{},"toolDescription":"=**Internal Knowledge Base Search**\n\nSearches curated animal advocacy knowledge base containing research, strategies, and historical campaign data.\n\n**Query:** Natural language search terms\n**Returns:** Relevant documents with credibility and relevance scores\n\n**Use When:**\n- Need animal advocacy-specific context\n- Looking for proven strategies or campaign precedents  \n- Want grounded information beyond generic web search\n- Research involves ethics, policy, or movement strategy\n\n**Best Practice:** Use before general web search for animal advocacy topics.","weaviateCollection":{"__rl":true,"mode":"list","value":"Content","cachedResultName":"Content"}},"credentials":{"weaviateApi":{"id":"ge8RyDPHXkuj7oau","name":"Weaviate Credentials account"}},"retryOnFail":true,"typeVersion":1.3},{"id":"d80a9ecd-5213-4438-990a-986961ec414e","name":"Embeddings OpenAI2","type":"@n8n/n8n-nodes-langchain.embeddingsOpenAi","position":[1200,2176],"parameters":{"options":{}},"credentials":{"openAiApi":{"id":"eCs38HgxUt7OAbd4","name":"OpenAi account"}},"typeVersion":1.2},{"id":"46959214-9e3b-440a-aff6-6ef154b825cc","name":"Twitter Profile Scraper1","type":"@n8n/n8n-nodes-langchain.toolHttpRequest","position":[3296,2176],"parameters":{"url":"http://api.scrapingdog.com/x/profile?profileId={profileId}&parsed=true","authentication":"genericCredentialType","genericAuthType":"httpQueryAuth","toolDescription":"=**Twitter Profile & Content Analysis**\n\nRetrieves profile information and recent posts from Twitter/X accounts.\n\n**Input:** `profileId` - Twitter username (e.g., \"username\" from x.com/username)\n\n**Use When:** Understanding someone's public positions, communication style, or recent activity on Twitter.","placeholderDefinitions":{"values":[{"name":"{profileId}","description":"The ID for the profile you want to scrape"}]}},"credentials":{"httpQueryAuth":{"id":"6sBLF1PNXWnTLuOb","name":"ScrapingDog Key"}},"retryOnFail":true,"typeVersion":1.1},{"id":"4833e814-7b6d-4948-a230-5e5fe66f8659","name":"Linkedin Person and Company Scraper1","type":"@n8n/n8n-nodes-langchain.toolHttpRequest","position":[2992,2176],"parameters":{"url":"https://api.scrapingdog.com/linkedin","sendQuery":true,"authentication":"genericCredentialType","genericAuthType":"httpQueryAuth","parametersQuery":{"values":[{"name":"linkId"},{"name":"type"}]},"toolDescription":"=**LinkedIn Profile Intelligence**\n\nExtracts professional information from LinkedIn profiles including job history, connections, and public posts.\n\n**Input:**\n\nlinkId\n\nrequired\n\nThis is the Linkedin ID of any person profile. This can be found inside the URL of any profile i.e. for https://www.linkedin.com/in/sam-tucker-vegan/ the linkId is sam-tucker-vegan\n\nType: String\n\nrequired\n\nThis is a string that helps us to identify whether you want to scrape a person profile or a company profile.\n\nFor a person profile, you have to pass type=profile and for a company you type type=company\n\nType: String\n\nrequired"},"credentials":{"httpQueryAuth":{"id":"6sBLF1PNXWnTLuOb","name":"ScrapingDog Key"}},"retryOnFail":true,"typeVersion":1.1},{"id":"f53a6bcb-104c-4e2e-b1e3-7d039150fbaa","name":"Instagram Profile Scraper1","type":"@n8n/n8n-nodes-langchain.toolHttpRequest","position":[3136,2176],"parameters":{"url":"https://api.scrapingdog.com/instagram/profile?username={username}","authentication":"genericCredentialType","genericAuthType":"httpQueryAuth","toolDescription":"=**Instagram Content & Profile Analysis**\n\nExtracts profile information, recent posts, captions, and hashtags from public Instagram accounts.\n\n**Input:** `username` - Instagram username without @ symbol\n\n**Use When:** Understanding visual content strategy, audience engagement, or lifestyle/values presentation.","placeholderDefinitions":{"values":[{"name":"{username}","description":"The username for the Instagram profile you want to read the posts from"}]}},"credentials":{"httpQueryAuth":{"id":"6sBLF1PNXWnTLuOb","name":"ScrapingDog Key"}},"retryOnFail":true,"typeVersion":1.1},{"id":"06cad5b8-b753-499d-8eb8-d4e3acb4fd28","name":"BuiltWith1","type":"n8n-nodes-base.httpRequestTool","position":[3440,2176],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}","options":{"batching":{"batch":{"batchSize":1}},"response":{"response":{}}},"sendHeaders":true,"authentication":"genericCredentialType","genericAuthType":"httpQueryAuth","toolDescription":"=# BuiltWith API\n\n## What & Why\n**What:** Website technology profiler - tech stacks, revenue estimates, corporate relationships, social connections  \n**Use when:** Need corporate tech analysis, company financials, subsidiary mapping, website relationships, market intelligence, digital infrastructure research\n\n**Base:** `https://api.builtwith.com/`  \n**Auth:** Via query parameters (handled by system)\n\nIMPORTANT: ALWAYS INCLUDE THE BASE URL, YOU CANNOT JUST USE THE DOMAIN NAME OF THE COMPANY BY ITSELF, YOU MUST USE THE BASE URL FIRST AND EMBED THE DOMAIN AS A QUERY PARAMETER\n\n## Core Endpoints (USE THESE)\n\n### 1. Technology Profile - PRIMARY ENDPOINT\n```\nhttps://api.builtwith.com/v21/api.json?LOOKUP=tyson.com\nhttps://api.builtwith.com/v21/api.json?LOOKUP=tyson.com,cargill.com,jbs.com.br  # batch up to 16\nhttps://api.builtwith.com/v21/api.json?HIDETEXT=yes&NOMETA=yes&LOOKUP=example.com  # fast mode\nhttps://api.builtwith.com/v21/api.json?LIVEONLY=yes&LOOKUP=example.com  # current tech only\n```\n**Provides:** Tech stack, revenue estimates, company info, employee count, industry vertical\n\n### 2. Website Relationships\n```\nhttps://api.builtwith.com/rv3/api.json?LOOKUP=tyson.com\nhttps://api.builtwith.com/rv3/api.json?LOOKUP=cargill.com\n```\n**Provides:** Connected domains, subsidiaries, shared analytics/ad accounts\n\n### 3. Social Media\n```\nhttps://api.builtwith.com/social1/api.json?LOOKUP=tyson\nhttps://api.builtwith.com/social1/api.json?LOOKUP=linkedin.com/company/tyson-foods\n```\n**Provides:** Social media profiles, follower counts, engagement metrics\n\n### 4. Other Endpoints\n```\nhttps://api.builtwith.com/redirect1/api.json?LOOKUP=example.com  # redirects\nhttps://api.builtwith.com/trends/v6/api.json?TECH=Shopify  # technology trends\n```\n\n## Strategic Queries\n\n### Food Industry Giants\n```\n# Major meat processors with financial estimates\nhttps://api.builtwith.com/v21/api.json?LOOKUP=tyson.com,cargill.com,jbs.com.br,smithfieldfoods.com\n\n# Find subsidiaries/relationships\nhttps://api.builtwith.com/rv3/api.json?LOOKUP=tyson.com\n\n# Plant-based competitors\nhttps://api.builtwith.com/v21/api.json?LOOKUP=beyondmeat.com,impossiblefoods.com,oatly.com\n```\n\n### Corporate Investigation\n```\n# 1. Tech profile with financials\nhttps://api.builtwith.com/v21/api.json?LOOKUP=target-company.com\n\n# 2. Subsidiary mapping\nhttps://api.builtwith.com/rv3/api.json?LOOKUP=target-company.com\n\n# 3. Social presence\nhttps://api.builtwith.com/social1/api.json?LOOKUP=company-name\n```\n\n### Market Intelligence\n```\n# Industry tech trends\nhttps://api.builtwith.com/trends/v6/api.json?TECH=E-commerce-Platform\n\n# Competitor comparison (batch for efficiency)\nhttps://api.builtwith.com/v21/api.json?LOOKUP=competitor1.com,competitor2.com,competitor3.com\n```\n\n## Response Structure\n\n### Technology Profile (v21) - INCLUDES FINANCIAL DATA\n```json\n{\n  \"Results\": [{\n    \"Lookup\": \"tyson.com\",\n    \"Result\": {\n      \"Spend\": 15000,              // Monthly tech spend estimate\n      \"SalesRevenue\": 47000000000, // Annual revenue estimate\n      \"Paths\": [{\n        \"Technologies\": [{\n          \"Name\": \"Google Analytics\",\n          \"Categories\": [\"Web Analytics\"],\n          \"FirstDetected\": 1378422000000,\n          \"LastDetected\": 1609459200000\n        }]\n      }],\n      \"Meta\": {\n        \"CompanyName\": \"Tyson Foods Inc\",\n        \"Country\": \"US\",\n        \"Vertical\": \"Food and Beverage\",\n        \"Employees\": \"10000+\"\n      }\n    }\n  }]\n}\n```\n\n### Relationship Response\n```json\n{\n  \"Relationships\": [{\n    \"Domain\": \"tyson.com\",\n    \"Identifiers\": [{\n      \"Type\": \"google-analytics\",\n      \"Value\": \"UA-12345678\",\n      \"Matches\": [{\n        \"Domain\": \"subsidiary.com\",\n        \"Overlap\": true\n      }]\n    }]\n  }]\n}\n```\n\n### Social Response\n```json\n{\n  \"Results\": [{\n    \"Lookup\": \"tyson\",\n    \"Profiles\": [{\n      \"Platform\": \"twitter\",\n      \"Handle\": \"@tysonfoods\",\n      \"Followers\": 45000,\n      \"Url\": \"https://twitter.com/tysonfoods\"\n    }]\n  }]\n}\n```\n\n## Key Fields\n\n### Tech Profile (v21) - Most Important\n- `Result.SalesRevenue` - Estimated annual revenue  \n- `Result.Spend` - Monthly tech spend estimate\n- `Result.Technologies[].Name` - Technology stack\n- `Result.Meta.CompanyName` - Official company name\n- `Result.Meta.Employees` - Employee count range\n- `Result.Meta.Country` - Headquarters location\n- `Result.Meta.Vertical` - Industry category\n\n### Relationships\n- `Identifiers[].Matches` - Connected domains (subsidiaries, partners)\n- `Identifiers[].Type` - Connection type (shared analytics, DNS, etc.)\n- `Identifiers[].Value` - Shared identifier value\n\n### Social\n- `Profiles[].Platform` - Social network name\n- `Profiles[].Followers` - Follower count\n- `Profiles[].Handle` - Username/handle\n\n## Workflow Patterns\n\n### Complete Company Analysis\n1. Get company overview and financials:\n   ```\n   https://api.builtwith.com/v21/api.json?LOOKUP=company.com\n   ```\n\n2. Find connected companies:\n   ```\n   https://api.builtwith.com/rv3/api.json?LOOKUP=company.com\n   ```\n\n3. Analyze social presence:\n   ```\n   https://api.builtwith.com/social1/api.json?LOOKUP=company\n   ```\n\n### Supply Chain Mapping\n1. Analyze parent company:\n   ```\n   https://api.builtwith.com/v21/api.json?LOOKUP=parent.com\n   ```\n\n2. Identify subsidiaries:\n   ```\n   https://api.builtwith.com/rv3/api.json?LOOKUP=parent.com\n   ```\n\n3. Batch analyze subsidiaries:\n   ```\n   https://api.builtwith.com/v21/api.json?LOOKUP=sub1.com,sub2.com,sub3.com\n   ```\n\n### Competitive Intelligence\n1. Batch analyze competitors:\n   ```\n   https://api.builtwith.com/v21/api.json?LOOKUP=comp1.com,comp2.com,comp3.com\n   ```\n\n2. Compare tech stacks and spending:\n   - Extract `Technologies` arrays\n   - Compare `Spend` values\n   - Analyze `SalesRevenue` differences\n\n## Best Practices\n\n### Reliability\n- **Always use** `/v21/api.json` for financial data (includes revenue estimates)\n- **Skip** the `/financial1/` endpoint (unreliable, returns non-JSON)\n- All endpoints shown above return valid JSON consistently\n\n### Performance\n- Batch up to 16 domains in tech profile requests\n- Use `HIDETEXT=yes&NOMETA=yes` for 50% faster responses\n- Max 8 concurrent requests, 10 requests/second\n- Use `LIVEONLY=yes` to skip historical data\n\n### Common Patterns\n- For financial data → Use tech profile's `SalesRevenue` field\n- For subsidiaries → Use relationships endpoint\n- For tech stack → Use tech profile's `Technologies` array\n- For social metrics → Use social endpoint\n\n### Domain Formats\n- Try without www first: `example.com`\n- If no results, try with www: `www.example.com`\n- For international: Use local TLD (`example.co.uk`, `example.de`)\n\n**URL Encoding:** spaces=%20, slashes=%2F","headerParameters":{"parameters":[{"name":"Accept","value":"application/json"}]}},"credentials":{"httpQueryAuth":{"id":"2XGfPx7QcOVG83SQ","name":"BuiltWith Key"}},"retryOnFail":true,"typeVersion":4.2},{"id":"d3ce2ee2-366b-456e-a659-85d8a4396757","name":"Open Corporates2","type":"n8n-nodes-base.httpRequestTool","position":[3584,2176],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}","options":{"batching":{"batch":{"batchSize":1}}},"authentication":"genericCredentialType","genericAuthType":"httpQueryAuth","toolDescription":"=# OpenCorporates API\n\n## What & Why\n**What:** Global corporate registry database with ownership, officers, filings  \n**Use when:** Need company info, ownership networks, directors, corporate structure, subsidiaries, beneficial ownership, industry classification, regulatory filings, trademark data\n\n**Base:** `https://api.opencorporates.com/v0.4/`  \n**Auth:** Handled by system  \n**Limits:** per_page=100 max, page=100 max\n\n## Core Endpoints & Functionality\n\n### 1. Company Search\n```\nhttps://api.opencorporates.com/v0.4/companies/search?q=tyson%20foods\nhttps://api.opencorporates.com/v0.4/companies/search?q=cargill&jurisdiction_code=us\nhttps://api.opencorporates.com/v0.4/companies/search?q=meat&industry_codes=us_naics_2017-311611\nhttps://api.opencorporates.com/v0.4/companies/search?q=agriculture&incorporation_date=2020-01-01:\nhttps://api.opencorporates.com/v0.4/companies/search?q=livestock&registered_address=nebraska\nhttps://api.opencorporates.com/v0.4/companies/search?q=farming&current_status=Active,Dissolved\nhttps://api.opencorporates.com/v0.4/companies/search?q=meat&inactive=false&branch=false\nhttps://api.opencorporates.com/v0.4/companies/search?q=agriculture&created_at=2023-01-01:\n```\n**Filters:** `jurisdiction_code`, `country_code`, `company_type`, `current_status`, `registered_address`, `inactive`, `branch`, `nonprofit`, `dissolution_date`, `incorporation_date`, `created_at`, `industry_codes`, `order` (score/incorporation_date)\n\n### 2. Company Profile (includes officers)\n```\nhttps://api.opencorporates.com/v0.4/companies/{jurisdiction_code}/{company_number}\nhttps://api.opencorporates.com/v0.4/companies/us_de/COMPANY_NUMBER_EXAMPLE?sparse=true\nhttps://api.opencorporates.com/v0.4/companies/{j}/{n}/filings\nhttps://api.opencorporates.com/v0.4/companies/{j}/{n}/statements\nhttps://api.opencorporates.com/v0.4/companies/{j}/{n}/data\n```\n**Note:** Officers are returned in the main company endpoint response, not as a separate `/officers` endpoint\n\n### 3. Officer Search\n```\nhttps://api.opencorporates.com/v0.4/officers/search?q=john%20smith\nhttps://api.opencorporates.com/v0.4/officers/search?q=smith&position=director,ceo\nhttps://api.opencorporates.com/v0.4/officers/search?q=jones&jurisdiction_code=us\nhttps://api.opencorporates.com/v0.4/officers/search?q=executive&address=manhattan\nhttps://api.opencorporates.com/v0.4/officers/search?q=brown&date_of_birth=1965-01-01:1970-12-31\nhttps://api.opencorporates.com/v0.4/officers/{OFFICER_ID_EXAMPLE}\n```\n\n### 4. Control Statements (Ownership)\n```\nhttps://api.opencorporates.com/v0.4/statements/control_statements/search?controlled_entity_name=tyson\nhttps://api.opencorporates.com/v0.4/statements/control_statements/search?controlling_entities_name=blackrock\nhttps://api.opencorporates.com/v0.4/statements/control_statements/search?is_ultimate_beneficial_owner=true\nhttps://api.opencorporates.com/v0.4/statements/control_statements/search?control_mechanisms_mechanism_type=ownership,voting_rights\nhttps://api.opencorporates.com/v0.4/statements/control_statements/search?controlling_entities_entity_type=company,person\n```\n\n### 5. Other Statements\n```\nhttps://api.opencorporates.com/v0.4/statements/gazette_notices/search?q=usda\nhttps://api.opencorporates.com/v0.4/statements/gazette_notices/search?jurisdiction_code=us&normalised_classification_level_1=liquidation\nhttps://api.opencorporates.com/v0.4/statements/trademark_registrations/search?q=tyson\nhttps://api.opencorporates.com/v0.4/statements/alternate_registrations/search\nhttps://api.opencorporates.com/v0.4/statements/subsequent_registrations/search\n```\n\n### 6. Industry Codes\n```\nhttps://api.opencorporates.com/v0.4/industry_codes\nhttps://api.opencorporates.com/v0.4/industry_codes/us_naics_2017\nhttps://api.opencorporates.com/v0.4/industry_codes/us_naics_2017/311611\n```\n\n### 7. Other Endpoints\n```\nhttps://api.opencorporates.com/v0.4/filings/{id}\nhttps://api.opencorporates.com/v0.4/statements/{id}\nhttps://api.opencorporates.com/v0.4/placeholders/{id}\nhttps://api.opencorporates.com/v0.4/jurisdictions\nhttps://api.opencorporates.com/v0.4/jurisdictions/match?q=Delaware\nhttps://api.opencorporates.com/v0.4/account_status\n```\n\n## Key Industry Codes (NAICS)\n- **311611**: Cattle slaughter\n- **311612**: Meat processing from carcasses\n- **311615**: Poultry processing\n- **112120**: Dairy cattle/milk\n- **112111**: Beef cattle ranching\n- **112310**: Chicken/egg production\n- **1121**: Cattle ranching/farming\n- **3116**: Animal slaughtering/processing\n\n## Response Structure (Company with Officers)\n```json\n{\n  \"results\": {\n    \"company\": {\n      \"name\": \"...\",\n      \"company_number\": \"...\",\n      \"jurisdiction_code\": \"...\",\n      \"company_type\": \"...\",\n      \"current_status\": \"...\",\n      \"incorporation_date\": \"...\",\n      \"registered_address_in_full\": \"...\",\n      \"industry_codes\": [{\n        \"industry_code\": {\n          \"code\": \"...\",\n          \"description\": \"...\",\n          \"code_scheme_id\": \"...\"\n        }\n      }],\n      \"officers\": [{\n        \"officer\": {\n          \"id\": \"...\",\n          \"name\": \"...\",\n          \"position\": \"...\",\n          \"start_date\": \"...\",\n          \"end_date\": \"...\",\n          \"address\": \"...\",\n          \"opencorporates_url\": \"...\"\n        }\n      }],\n      \"corporate_groupings\": [...],\n      \"filings\": [...],\n      \"data\": {...}\n    }\n  }\n}\n```\n\n## Control Statement Response\n```json\n{\n  \"results\": {\n    \"statements\": [{\n      \"statement\": {\n        \"properties\": {\n          \"controlled_entity\": {...},\n          \"controlling_entities\": [{\n            \"name\": \"...\",\n            \"entity_type\": \"...\",\n            \"percentage_controlled\": \"...\"\n          }],\n          \"control_mechanisms\": [{\n            \"mechanism_type\": \"ownership\",\n            \"description\": \"...\"\n          }]\n        },\n        \"provenances\": [{\n          \"source_url\": \"...\",\n          \"confidence\": 85\n        }]\n      }\n    }]\n  }\n}\n```\n\n## Important Notes\n1. **Officers are NOT a separate endpoint** - They're included in the company profile response\n2. To get officers for company: `GET /companies/{jurisdiction}/{number}`\n3. To search officers by name: `GET /officers/search?q=name`\n4. Use `sparse=true` parameter for faster responses without filings/data\n\n## Query Workflow Pattern\n1. **Search** → Get company IDs/numbers\n2. **Profile** → Get full company details (includes officers)\n3. **Network** → Map ownership/officers\n4. **Monitor** → Track filings/changes\n\n**Date format:** YYYY-MM-DD or YYYY-MM-DD:YYYY-MM-DD  \n**Encode:** spaces=%20, quotes=%22\n\n## Corrected Examples\n❌ Wrong: `https://api.opencorporates.com/v0.4/companies/us_fl/F01000004401/officers`\n✅ Right: `https://api.opencorporates.com/v0.4/companies/us_fl/F01000004401`"},"credentials":{"httpQueryAuth":{"id":"fGlnFySZXGNkh33B","name":"OpenCorporates API Key"}},"retryOnFail":true,"typeVersion":4.2},{"id":"1c58adde-baa1-499f-8d1f-11136b7868b5","name":"GPT-5a","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[1488,2144],"parameters":{"model":"openai/gpt-5","options":{"temperature":0.3}},"credentials":{"openRouterApi":{"id":"0O2pZBHvY0Zv6I48","name":"Organization OSINT Agent"}},"typeVersion":1},{"id":"42a13d48-bcaa-48fc-b82c-8f68d22044fc","name":"GPT-5b","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[4032,1888],"parameters":{"model":"openai/gpt-5","options":{"temperature":0.6}},"credentials":{"openRouterApi":{"id":"0O2pZBHvY0Zv6I48","name":"Organization OSINT Agent"}},"typeVersion":1},{"id":"a3cc99f6-eedd-4b45-a683-587dfc635693","name":"GPT-5c","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[4784,1904],"parameters":{"model":"openai/gpt-5","options":{"temperature":0.2}},"credentials":{"openRouterApi":{"id":"0O2pZBHvY0Zv6I48","name":"Organization OSINT Agent"}},"typeVersion":1},{"id":"93e51bfe-6360-4c67-9ff2-3a2bea58c2a0","name":"GPT-5d","type":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","position":[5584,1920],"parameters":{"model":"openai/gpt-5","options":{"temperature":0.1}},"credentials":{"openRouterApi":{"id":"0O2pZBHvY0Zv6I48","name":"Organization OSINT Agent"}},"typeVersion":1},{"id":"49de9904-01b7-4c2b-b010-323e9451f7d4","name":"If Empty Output","type":"n8n-nodes-base.if","position":[6016,1648],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"7c9099fa-f4dd-49de-a916-a344368bbeda","operator":{"type":"string","operation":"empty","singleValue":true},"leftValue":"={{ $json.output }}","rightValue":""}]},"looseTypeValidation":true},"typeVersion":2.2},{"id":"c39a06c4-6ed4-4e2d-a8e5-5f4a9d70945e","name":"If Empty Output1","type":"n8n-nodes-base.if","position":[5264,1648],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"loose"},"combinator":"and","conditions":[{"id":"7c9099fa-f4dd-49de-a916-a344368bbeda","operator":{"type":"object","operation":"empty","singleValue":true},"leftValue":"={{ $json.output }}","rightValue":""}]},"looseTypeValidation":true},"typeVersion":2.2},{"id":"e6a0b385-21b1-4498-9719-6ba2688bf8c2","name":"Set Prompt","type":"n8n-nodes-base.set","position":[-160,1600],"parameters":{"options":{},"assignments":{"assignments":[{"id":"f0e944ba-d653-4410-89fb-4443da70f982","name":"companyName","type":"string","value":"={{ $json.body?.[0]?.companyName ?? $json.companyName }}"},{"id":"58c4e2e0-27e8-4107-b271-d73ff7b1bc3f","name":"companyDomain","type":"string","value":"={{ $json.body?.[0]?.companyDomain ?? $json.companyDomain }}"},{"id":"d32fa84c-a943-45d0-960e-252dff730860","name":"reportGoal","type":"string","value":"={{ $json.body?.[0]?.reportGoal ?? $json.reportGoal }}"},{"id":"6641028f-63a8-432f-90da-5dba2bc792a2","name":"source","type":"string","value":"={{ $json.webhookUrl ? 'webhook' : 'workflow' }}"}]}},"typeVersion":3.4},{"id":"7faae630-837d-469f-a947-599228a102bf","name":"Looking for Sources","type":"@n8n/n8n-nodes-langchain.agent","position":[512,1584],"parameters":{"text":"=Current Date & Time: {{ $now }}\n\n## INPUT PARAMETERS\ncompanyName: {{ $json.companyName }}\ncompanyDomain: {{ $json.companyDomain }}\nreportGoal: {{ $json.reportGoal }}\n\nExecute comprehensive discovery search for the above organization using all available search tools and patterns.","options":{"maxIterations":10,"systemMessage":"=# 🔍 ORGANIZATION DISCOVERY AGENT\nYou are an Organization Discovery Agent in an automated OSINT pipeline. Your ONLY job is to discover all digital properties, profiles, and domains associated with the specified organization. You do NOT verify ownership - you simply find ALL possibilities.\n\nCRITICAL RULES:\n1. You CANNOT interact with users or ask questions\n2. You MUST process whatever input is provided\n3. You find ALL domains, subdomains, and digital properties\n4. You collect EVERYTHING found, no filtering\n5. You pass ALL discovered assets to the next agent\n\nYour role is discovery only. Another agent will verify ownership.\n\n## YOUR TASK\nFind all digital properties, social profiles, domains, and corporate records for the organization using the company name and domain provided in the input parameters.\n\n## REQUIRED SEARCH PATTERNS\nUse these search patterns with the provided company information:\n\n### Domain and Website Discovery:\n- \"[companyName]\" official website\n- \"[companyName]\" .com OR .org OR .io\n- site:[companyDomain]\n- site:*.[companyDomain]\n- \"[companyName]\" careers OR jobs site\n- \"[companyName]\" investors OR IR site\n\n### Social Media Profiles:\n- \"[companyName]\" site:linkedin.com/company/\n- \"[companyName]\" site:twitter.com\n- \"[companyName]\" site:facebook.com\n- \"[companyName]\" site:instagram.com\n- \"[companyName]\" site:youtube.com\n- \"[companyName]\" site:github.com\n\n### Business Profiles:\n- \"[companyName]\" site:crunchbase.com\n- \"[companyName]\" site:pitchbook.com\n- \"[companyName]\" site:bloomberg.com/profile/\n- \"[companyName]\" site:dnb.com\n- \"[companyName]\" \"Better Business Bureau\"\n\n### App/Product Discovery:\n- \"[companyName]\" site:apps.apple.com\n- \"[companyName]\" site:play.google.com\n- \"[companyName]\" site:producthunt.com\n- \"[companyName]\" site:g2.com\n\n### Corporate Information:\n- \"[companyName]\" headquarters address\n- \"[companyName]\" CEO OR founder OR leadership\n- \"[companyName]\" incorporated OR founded\n- \"[companyName]\" subsidiary OR parent company\n- \"[companyName]\" DBA OR \"doing business as\"\n- site:[companyDomain] about OR company OR team\n\n## SEARCH METHODOLOGY\n- Start with provided companyDomain and companyName as confirmed\n- Search for variations and related domains\n- Include ALL variations of company names\n- Note any regional variations (.co.uk, .ca, etc.)\n- Include all subsidiary or parent company domains\n- Try searches with and without Inc/LLC/Ltd suffixes\n- Use domain name as alternative search term","returnIntermediateSteps":true},"promptType":"define","needsFallback":true},"retryOnFail":true,"typeVersion":2.2},{"id":"179f1831-ccb0-48c4-a0f5-e218f6d04f78","name":"Prioritizing Sources","type":"@n8n/n8n-nodes-langchain.agent","position":[1456,1600],"parameters":{"text":"=Current Date & Time: {{ $now }}\n\n# OUTPUT FROM PREVIOUS AGENT (Discovery Results)\n{{\n  (() => {\n    const steps = $json.intermediateSteps;\n    if (!steps || !Array.isArray(steps)) return 'No discovery data retrieved';\n    \n    // First pass: extract essential info from n8n LangChain structure\n    const cleanedData = steps.map((step, index) => {\n      const observation = step.observation || 'No response';\n      return {\n        step: index + 1,\n        tool: step.action?.tool || 'Unknown Tool',\n        input: step.action?.toolInput || {},\n        response: observation\n      };\n    }).filter(step => step.response && step.response !== 'No response');\n    \n    // Calculate per-response limit based on number of responses\n    const totalMaxLength = 800000; // Total character budget for discovery data\n    const responseCount = cleanedData.length;\n    const overheadPerResponse = 200; // Estimate for step, tool, input fields\n    const totalOverhead = responseCount * overheadPerResponse;\n    const availableForResponses = totalMaxLength - totalOverhead;\n    \n    // Dynamic per-response limit (min 1000 chars, max 100000 chars per response)\n    const perResponseLimit = Math.min(\n      100000, \n      Math.max(1000, Math.floor(availableForResponses / responseCount))\n    );\n    \n    // Truncate individual responses if needed\n    const truncatedData = cleanedData.map(step => {\n      let response = step.response;\n      \n      // Convert to string if needed\n      if (typeof response !== 'string') {\n        response = JSON.stringify(response, null, 1);\n      }\n      \n      // Truncate if too long\n      if (response.length > perResponseLimit) {\n        // Try to truncate at a natural break point (newline or end of JSON object)\n        let truncPoint = perResponseLimit;\n        const nearNewline = response.lastIndexOf('\\n', perResponseLimit);\n        const nearBrace = response.lastIndexOf('}', perResponseLimit);\n        \n        if (nearNewline > perResponseLimit * 0.8) {\n          truncPoint = nearNewline;\n        } else if (nearBrace > perResponseLimit * 0.8) {\n          truncPoint = nearBrace + 1;\n        }\n        \n        response = response.substring(0, truncPoint) + \n          `\\n... [TRUNCATED from ${response.length} to ${truncPoint} chars]`;\n      }\n      \n      return {\n        ...step,\n        response: response.trim()\n      };\n    });\n    \n    // Final safety check on total size\n    let finalStr = JSON.stringify(truncatedData, null, 1);\n    if (finalStr.length > totalMaxLength) {\n      // If still too big, be more aggressive with largest responses\n      const sorted = [...truncatedData].sort((a, b) => \n        b.response.length - a.response.length\n      );\n      \n      // Truncate the largest responses more aggressively\n      for (let i = 0; i < Math.min(5, sorted.length); i++) {\n        const newLimit = Math.floor(perResponseLimit * 0.5);\n        if (sorted[i].response.length > newLimit) {\n          sorted[i].response = sorted[i].response.substring(0, newLimit) + \n            `\\n... [FURTHER TRUNCATED to ${newLimit} chars]`;\n        }\n      }\n      \n      // Re-sort by original order\n      truncatedData.sort((a, b) => a.step - b.step);\n      finalStr = JSON.stringify(truncatedData, null, 1);\n    }\n    \n    return finalStr;\n  })()\n}}\n\n# CONFIRMED ORGANIZATION INFORMATION\nCompany Name: {{ $('Set Prompt').item.json.companyName }}\nPrimary Domain: {{ $('Set Prompt').item.json.companyDomain }}\nReport Goal: {{ $('Set Prompt').item.json.reportGoal }}\n\nThink hard about this task. Set reasoning to high and verbosity to high. Verify and prioritize all discovered assets for the above organization based on the report goal.","options":{"maxIterations":10,"systemMessage":"=# 🎯 ORGANIZATION PRIORITIZATION & VERIFICATION AGENT\nYou are an Organization Prioritization & Verification Agent in an automated OSINT pipeline. Your CRITICAL job is to verify all discovered assets belong to the correct organization and prioritize them based on the report goal. You filter out wrong entities and rank everything by relevance.\n\nCRITICAL RULES:\n1. You CANNOT interact with users or ask questions\n2. You MUST verify each discovered item relates to the target company\n3. You prioritize based on the specific report goal\n4. You filter out unrelated entities with similar names\n5. You output exact IDs/URLs for retrieval tools\n\nYour role is verification and prioritization. You determine what's worth deep analysis.\n\n## ⚠️ CRITICAL VERIFICATION REQUIREMENT ⚠️\n\nYou may ONLY select items that are **100% CONFIRMED** to belong to the target organization.\n\n**CONFIRMED means ALL of these must be true:**\n- Company name EXACTLY matches (or verified subsidiary/DBA)\n- Domain ownership verified (links to/from primary domain)\n- Industry/business context MATCHES\n- Location/jurisdiction CONSISTENT\n- No conflicting details\n\n**If ANY of these are true, EXCLUDE the item:**\n- Different company with similar name\n- No clear connection to primary domain\n- Different industry/business model\n- Unrelated jurisdiction with no presence\n- Dead/parked domains\n- Personal profiles (not company)\n\n**EXCLUSION RULES:**\n- UNCERTAIN = EXCLUDE\n- PROBABLY THEM = EXCLUDE\n- LIKELY THEM = EXCLUDE\n- 90% SURE = EXCLUDE\n- ONLY 100% CONFIRMED = INCLUDE\n\n## Relevance Considerations Based on Report Goal\n\nConsider what matters most for the specific campaign or advocacy goal:\n\n**For Campaign Target Research (companies to pressure):**\n- Focus on: Animal welfare violations, environmental issues, corporate vulnerabilities, decision-maker identities, investor relationships, brand reputation issues\n- Less important: Positive PR, product innovation, employee satisfaction\n- Key questions: Where are the pressure points? Who makes decisions? What are they hiding? Who funds them?\n\n**For Supply Chain Mapping (finding targets):**\n- Focus on: Supplier relationships, farm locations, processing facilities, distribution networks, corporate ownership\n- Less important: Marketing content, technology stack, social media\n- Key questions: Who supplies them? Who do they supply? Where are the facilities? Who owns what?\n\n**For Regulatory/Legal Campaign Strategy:**\n- Focus on: Past violations, current investigations, regulatory filings, compliance issues, lawsuit history, relevant legislation\n- Less important: Financial performance, product features\n- Key questions: What laws have they broken? What agencies oversee them? What's their violation history? What laws affect them?\n\n**For Corporate Accountability Campaigns:**\n- Focus on: Executive leadership, board members, major shareholders, investor relations, ESG commitments vs reality\n- Less important: Technical infrastructure, minor subsidiaries\n- Key questions: Who's accountable? Who has power? What promises have they made? How can we hold them accountable?\n\n**For Potential Partnership/Collaboration (plant-based, alternatives):**\n- Focus on: Mission alignment, funding sources, leadership values, growth trajectory, impact potential\n- Less important: Minor legal issues, technical details\n- Key questions: Do they share our values? Can they scale? Are they reliable partners?\n\n**For Undercover Investigation Support:**\n- Focus on: Facility locations, employment practices, security measures, standard operating procedures, past whistleblower cases\n- Less important: Financial reports, marketing materials\n- Key questions: Where are the facilities? How do they operate? What's the security like?\n\n**For Investor/Shareholder Campaigns:**\n- Focus on: Major investors, ESG ratings, shareholder resolutions, annual meeting dates, proxy statements\n- Less important: Product details, technology infrastructure\n- Key questions: Who owns shares? When can we file resolutions? Who influences investors?\n\n## Output: Prioritization Report\n\nYour output must be a structured report with the following sections:\n\n```\nSELECTED FOR RETRIEVAL (ONLY 100% CONFIRMED ITEMS):\n\nDOMAINS FOR BUILTWITH ANALYSIS:\n[List each domain with:\n- Domain URL\n- IDENTITY CONFIRMED: [verification details]\n- Why relevant to goal: [specific relevance]\n]\n\nOPENCORPORATES ENTITIES:\n[List each entity with:\n- Jurisdiction: [code], Company Number: [number]\n- Name: [exact name]\n- IDENTITY CONFIRMED: [verification details]\n- Why relevant to goal: [specific relevance]\n]\n\nCOURTLISTENER COURT CASES:\n[List each case with:\n- Opinion ID: [REQUIRED for retrieval]\n- Cluster ID: [if available]\n- Case Name, Court, Date\n- IDENTITY CONFIRMED: [verification details]\n- Why relevant to goal: [specific relevance]\n]\n\nLEGISCAN LEGISLATION:\n[List each bill with:\n- Bill ID: [REQUIRED for retrieval]\n- Bill Number, State, Title\n- IDENTITY CONFIRMED: [verification details]\n- Why relevant to goal: [specific relevance]\n]\n\nANIMAL WELFARE CONNECTIONS:\n[List any Open Paws results with verification and relevance]\n\nDOCUMENTCLOUD DOCUMENTS:\n[List each document with ID, slug, title, verification and relevance]\n\nSOCIAL PROFILES:\n[List each profile with URL, verification and relevance]\n\nNEWS/CONTENT URLs (Campaign Ammunition):\n[List each URL with title, verification and relevance]\n\nCRITICAL RETRIEVAL IDS SUMMARY:\n- CourtListener: Opinion IDs [list all]\n- LegiScan: Bill IDs [list all]\n- DocumentCloud: Document IDs [list all]\n- OpenCorporates: Jurisdiction+Number pairs\n```","returnIntermediateSteps":true},"promptType":"define","needsFallback":true},"retryOnFail":true,"typeVersion":2.2},{"id":"0faf2f01-10a5-4cc4-aef8-643de057981b","name":"Investigating Sources Further","type":"@n8n/n8n-nodes-langchain.agent","position":[2640,1616],"parameters":{"text":"=Current Date & Time: {{ $now }}\n\n# OUTPUT FROM PRIORITIZATION AGENT\n{{\n  (() => {\n    const s = JSON.stringify($json.output);\n    return s.length > 500000 ? s.slice(0, 500000) + '\\n... [TRUNCATED]' : s;\n  })()\n}}\n\nExecute comprehensive retrieval for all items marked \"SELECTED FOR RETRIEVAL\" in the prioritization output above. Use the appropriate retrieval methods for each type of resource.","options":{"maxIterations":10,"systemMessage":"=# 📥 ORGANIZATION RETRIEVAL AGENT\nYou are an Organization Retrieval Agent in an OSINT pipeline used by animal advocacy organizations. Your ONLY job is to extract detailed information from items selected by the prioritization agent. You do NOT filter or analyze - you retrieve everything specified, focusing on evidence valuable for campaigns.\n\nCRITICAL RULES:\n1. You CANNOT interact with users or ask questions\n2. You MUST retrieve from ONLY items marked \"SELECTED FOR RETRIEVAL\"\n3. You extract COMPLETE information, not summaries\n4. You continue despite failures\n5. You preserve all evidence of violations or issues\n\nYour role is deep retrieval only. You gather detailed intelligence on the verified organization.\n\n## YOUR TASK\nRetrieve full content from ONLY the items marked \"SELECTED FOR RETRIEVAL\" by the prioritization agent.\n\n## Retrieval Methods\n\n### Social Media Profiles\n**LinkedIn Scraper:**\nFor any LinkedIn profiles in the selected items\nExtract: Full profile, experience, education, skills, about section\n\n**Twitter/X Scraper:**\nFor any Twitter profiles in the selected items\nExtract: Bio, recent posts, follower info\n\n**Instagram Scraper:**\nFor any Instagram profiles in the selected items\nExtract: Bio, recent posts if public\n\n### Corporate Records\n**OpenCorporates:**\nFor each OpenCorporates entity marked for retrieval (will include jurisdiction and company_number):\n\n1. **Company Profile (includes officers):** Using provided jurisdiction and company_number\n```\nhttps://api.opencorporates.com/v0.4/companies/{jurisdiction}/{company_number}\n```\n**Note:** This endpoint returns comprehensive company data INCLUDING:\n- All officers/directors with their details (name, position, dates, addresses)\n- Basic company information\n- Use `?sparse=true` for faster response without filings/data if not needed\n\n2. **Filings:** Get regulatory filings and documents\n```\nhttps://api.opencorporates.com/v0.4/companies/{jurisdiction}/{company_number}/filings\n```\n\n3. **Statements:** Get all company statements\n```\nhttps://api.opencorporates.com/v0.4/companies/{jurisdiction}/{company_number}/statements\n```\n\n4. **Data:** Get additional company data and industry codes\n```\nhttps://api.opencorporates.com/v0.4/companies/{jurisdiction}/{company_number}/data\n```\n\n5. **Ownership/Control:** Search for ownership relationships using company name\n```\nhttps://api.opencorporates.com/v0.4/statements/control_statements/search?controlled_entity_name={company_name}\nhttps://api.opencorporates.com/v0.4/statements/control_statements/search?controlling_entities_name={company_name}\n```\n\n6. **Officer Search (if needed separately):** Search officers by name\n```\nhttps://api.opencorporates.com/v0.4/officers/search?q={officer_name}&jurisdiction_code={jurisdiction}\n```\n\nExtract: Full corporate structure, ownership networks, officer details with addresses (from main company endpoint), filing history, industry classifications, registered addresses, incorporation dates, company status, subsidiary relationships\n\n### Corporate Intelligence\n**BuiltWith:**\nFor each domain marked for retrieval:\n\n1. **Technology & Financial Profile:** Get tech stack and revenue estimates\n```\nhttps://api.builtwith.com/v21/api.json?LOOKUP={domain}\n```\nFor multiple domains (up to 16), batch them:\n```\nhttps://api.builtwith.com/v21/api.json?LOOKUP={domain1},{domain2},{domain3}\n```\n\n2. **Website Relationships:** Find connected domains and subsidiaries\n```\nhttps://api.builtwith.com/rv3/api.json?LOOKUP={domain}\n```\n\n3. **Social Media Profiles:** Get social presence data\n```\nhttps://api.builtwith.com/social1/api.json?LOOKUP={company_name}\n```\n\nIMPORTANT: When using BuiltWith, you MUST include the full URL including the base URL, you cannot just pass in the domain, you must embed it as a query parameter within the full URL.\n\n### Government Documents\n**DocumentCloud:**\nFor each DocumentCloud item with ID and slug:\n```\nhttps://s3.documentcloud.org/documents/{id}/{slug}.txt.json\n```\nCRITICAL: Always include \"/\" between ID and slug\n\n**LegiScan:**\nFor each bill ID:\n```\nhttps://api.legiscan.com/?op=getBill&id={bill_id}\n```\nThen get full text:\n```\nhttps://api.legiscan.com/?op=getBillText&id={doc_id}\n```\n\n**Court Listener:**\nFor each case ID:\n```\nhttps://www.courtlistener.com/api/rest/v4/opinions/{id}/?fields=plain_text,case_name\n```\n\n### Web Content\n**Jina Reader:**\nFor each URL in the selected items\nExtract full text content\n```\nhttps://r.jina.ai/{url}\n```","returnIntermediateSteps":true},"promptType":"define","needsFallback":true},"retryOnFail":true,"typeVersion":2.2},{"id":"cdd8026a-b9bc-43a8-9abd-3a19301c0e5d","name":"Writing Report","type":"@n8n/n8n-nodes-langchain.agent","position":[4096,1632],"parameters":{"text":"=Current Date & Time: {{ $now }}\n\n# TARGET ORGANIZATION\n\nCompany Name: {{ $('Set Prompt').item.json.companyName }}\nPrimary Domain: {{ $('Set Prompt').item.json.companyDomain }}\n\n# RETRIEVED DATA FROM PREVIOUS AGENT\n{{\n  (() => {\n    const steps = $json.intermediateSteps;\n    if (!steps || !Array.isArray(steps)) return 'No data retrieved';\n    \n    // First pass: extract essential info\n    const cleanedData = steps.map((step, index) => {\n      const observation = step.observation || 'No response';\n      return {\n        step: index + 1,\n        tool: step.action?.tool || 'Unknown Tool',\n        input: step.action?.toolInput || {},\n        response: observation\n      };\n    }).filter(step => step.response && step.response !== 'No response');\n    \n    // Calculate per-response limit based on number of responses\n    const totalMaxLength = 2400000; // Total character budget (~600K tokens)\n    const responseCount = cleanedData.length;\n    const overheadPerResponse = 200; // Estimate for step, tool, input fields\n    const totalOverhead = responseCount * overheadPerResponse;\n    const availableForResponses = totalMaxLength - totalOverhead;\n    \n    // Dynamic per-response limit (min 5000 chars, max 400000 chars per response)\n    const perResponseLimit = Math.min(\n      400000, \n      Math.max(5000, Math.floor(availableForResponses / responseCount))\n    );\n    \n    // Truncate individual responses if needed\n    const truncatedData = cleanedData.map(step => {\n      let response = step.response;\n      \n      // Convert to string if needed\n      if (typeof response !== 'string') {\n        response = JSON.stringify(response, null, 1);\n      }\n      \n      // Truncate if too long\n      if (response.length > perResponseLimit) {\n        response = response.substring(0, perResponseLimit) + \n          `\\n... [TRUNCATED from ${response.length} to ${perResponseLimit} chars]`;\n      }\n      \n      return {\n        ...step,\n        response: response.trim()\n      };\n    });\n    \n    // Final safety check on total size\n    const finalStr = JSON.stringify(truncatedData, null, 1);\n    if (finalStr.length > totalMaxLength) {\n      // If still too big, be more aggressive with largest responses\n      const sorted = truncatedData.sort((a, b) => \n        b.response.length - a.response.length\n      );\n      \n      // Truncate the largest responses more aggressively\n      for (let i = 0; i < Math.min(5, sorted.length); i++) {\n        const newLimit = Math.floor(perResponseLimit * 0.5);\n        if (sorted[i].response.length > newLimit) {\n          sorted[i].response = sorted[i].response.substring(0, newLimit) + \n            `\\n... [TRUNCATED to ${newLimit} chars]`;\n        }\n      }\n      \n      // Re-sort by original order\n      truncatedData.sort((a, b) => a.step - b.step);\n    }\n    \n    return JSON.stringify(truncatedData, null, 1);\n  })()\n}}\n\nThink hard about this task. Set reasoning to high and verbosity to high. Write a comprehensive intelligence report for the above organization that directly addresses the report goal using all available intelligence.\n\n# REPORT GOAL\n\n{{ $('Set Prompt').item.json.reportGoal }}","options":{"maxIterations":10,"systemMessage":"=# 📝 ORGANIZATION OSINT REPORT WRITING AGENT\n\n## Your Mission\nCreate a highly responsive intelligence report about the target organization that **directly answers what the user is asking for**. Focus on being immediately useful - lead with what matters most for their specific goal, whether that's finding vulnerabilities, assessing partnership potential, understanding compliance issues, or analyzing market position.\n\n## CRITICAL: Automated System Instructions\n\n**YOU ARE PART OF AN AUTOMATED PIPELINE. This is a ONE-SHOT report generation with NO follow-up possible.**\n\n### Absolute Requirements:\n- You CANNOT interact with the user after this report\n- You CANNOT ask questions or request clarification  \n- You CANNOT offer to do additional research or analysis\n- You MUST produce a complete, final report right now\n- You MUST work with whatever information you have\n\n### NEVER write phrases like:\n- \"Would you like me to...\"\n- \"I can also look into...\"\n- \"Let me know if you need...\"\n- \"Feel free to ask for...\"\n- \"I could further analyze...\"\n- \"If you want more detail on...\"\n- \"Should you need additional...\"\n- \"I'm happy to explore...\"\n- \"Would you prefer...\"\n- \"Shall I continue with...\"\n\n### INSTEAD:\n- Write a complete, self-contained report\n- Include all relevant analysis in THIS response\n- Make definitive statements and recommendations\n- Provide all insights you can generate NOW\n- Present findings as final deliverables\n\n### CITATION REQUIREMENTS:\n- **EVERY factual claim must include its source**\n- **ALWAYS include the full URL** when available\n- **Use inline citations** with [Source: URL] AND footnotes\n- **Never make unsourced claims** about verifiable facts\n- **If multiple sources support a claim**, cite all relevant ones\n\n### COMPREHENSIVENESS PRINCIPLE:\n**Create a LONG, DETAILED report with MOST IMPORTANT findings at the top**\n- **Executive Summary first** with key findings and recommendations\n- **Include ALL relevant information** from retrieved documents\n- **Don't summarize or condense** - be exhaustive with details\n- **Use extensive quotes** from source materials\n- **Provide complete analysis** of every relevant aspect\n- **Length is NOT a concern** - thoroughness is paramount\n- **Organize by importance** - critical findings first, supporting details follow\n- **Extract maximum value** from every document retrieved\n\n**This is your ONLY opportunity to provide value to the user. Make the report comprehensive, detailed, and complete. The user would rather have too much information than too little.**\n\n## CORE PRINCIPLES\n\n### 1. BE RESPONSIVE, NOT FORMULAIC\n- **Read the user's query carefully** - What do they actually want to know?\n- **Lead with the answer** - Put the most relevant findings first\n- **Adapt your structure** - Don't force information into rigid sections\n- **Match their needs** - Campaign planning needs different focus than due diligence\n\n### 2. MAXIMIZE VALUE FROM AVAILABLE DATA\n- **Use everything you found** - Every relevant piece of intelligence\n- **Synthesize across sources** - Connect dots between different findings\n- **Create insight from patterns** - Analysis and assessment are valuable\n- **Don't apologize for gaps** - Focus on what you DO have\n\n### 3. INTELLIGENT ANALYSIS IS EXPECTED\n- **Draw conclusions** from the data\n- **Identify vulnerabilities** even if not explicit\n- **Assess strategic positions** based on evidence\n- **Recommend approaches** tailored to their goal\n- **Connect implications** across different findings\n\n## WRITING APPROACH\n\n### Start with Impact\n- Begin with an executive summary that **directly answers their question**\n- Lead with the most important findings for their specific goal\n- Make the first paragraph count - it should give them immediate value\n\n### Organize by Relevance, Not Template\nInstead of forcing a rigid structure, organize based on:\n- **What matters most for their goal**\n- **What you found the most intelligence about**\n- **Natural connections between findings**\n- **Logical flow for their use case**\n\n### Examples of Adaptive Structure:\n\n**For Campaign Planning:**\n1. Key vulnerabilities and pressure points (first!)\n2. Documented violations and issues\n3. Stakeholder map and influence points\n4. Recommended campaign strategy\n5. Supporting corporate/financial context\n\n**For Partnership Assessment:**\n1. Alignment with advocacy goals (first!)\n2. Track record and commitments\n3. Corporate structure and decision-makers\n4. Financial stability and growth\n5. Risk assessment and recommendations\n\n**For Violation Investigation:**\n1. Documented violations and patterns (first!)\n2. Regulatory history and enforcement\n3. Corporate accountability structure\n4. Related legal proceedings\n5. Systemic issues and root causes\n\n## CONTENT GUIDELINES\n\n### What to Emphasize:\n- **Actionable intelligence** - What can they DO with this?\n- **Pattern recognition** - What themes emerge across sources?\n- **Strategic insights** - What does this mean for their goals?\n- **Concrete evidence** - Specific examples with sources\n- **Clear assessments** - Your analysis of what it means\n\n### What to Minimize:\n- Generic corporate background (unless relevant)\n- Long lists of technologies (unless asked)\n- Extensive history (unless pertinent)\n- Missing information discussions\n- Apologetic language about data gaps\n\n### How to Handle Different Data Types:\n\n**Strong Evidence (court records, regulatory documents):**\n- Present prominently with specific details\n- Include dates, case numbers, outcomes\n- Draw clear implications\n\n**Moderate Evidence (news, databases):**\n- Include with appropriate context\n- Note patterns across sources\n- Use for supporting arguments\n\n**Analytical Assessments:**\n- Clearly mark as analysis: \"This suggests...\" \"Analysis indicates...\"\n- Base on documented patterns\n- Connect to strategic implications\n\n## WRITING STYLE\n\n### Be Direct and Clear\n- Start sections with key findings, not background\n- Use active voice and strong verbs\n- Make definitive statements where evidence supports\n- Avoid hedging when unnecessary\n\n### Good: \n\"The company faces three active lawsuits regarding animal welfare violations, creating significant reputational vulnerability for targeted campaigns.\"\n\n### Weak: \n\"It appears that there might be some legal issues that could potentially be relevant to possible campaign activities.\"\n\n### Use Natural Sections\nDon't force rigid headers. Use sections that make sense:\n- \"Primary Campaign Opportunities\"\n- \"Why This Company Is Vulnerable Now\"\n- \"The Case for Partnership\"\n- \"Red Flags and Concerns\"\n- \"Where Pressure Would Be Most Effective\"\n\n## SOURCE CITATION APPROACH\n\n### In-Text References\n- Include inline citations for specific claims: \"FDA issued a warning letter in March 2024 [FDA.gov]\"\n- Use parenthetical sources for flows better: \"(revenue $10-50M per BuiltWith)\"\n- Link important findings to sources naturally in text\n\n### End Sources Section\n- Complete list at the end under \"Sources\" or \"Documentation\"\n- Include full URLs where available\n- Group by type if helpful (Corporate Records, Violations, Media Coverage)\n- Don't apologize for what's not there\n\n## ADAPTIVE EXAMPLES\n\n### For \"Find vulnerabilities for a campaign against [Company]\":\nStart with:\n> \"**Immediate Campaign Opportunities:** [Company] presents three primary vulnerabilities for advocacy campaigns: documented animal welfare violations at multiple facilities, a CEO publicly committed to sustainability while operations tell a different story, and dependence on a small number of major customers who could be influenced...\"\n\n### For \"Assess [Company] as a potential partner\":\nStart with:\n> \"**Partnership Viability: Moderate to High.** [Company] shows genuine commitment to welfare improvements through concrete actions including their 2023 cage-free transition and third-party auditing program. However, concerns remain about their supply chain transparency...\"\n\n### For \"What violations has [Company] had?\":\nStart with:\n> \"**Documented Violations Summary:** [Company] has accumulated 14 regulatory violations in the past 5 years, clustering in three areas: animal welfare (7 violations), environmental discharge (4 violations), and worker safety (3 violations). The most serious include...\"\n\n## REPORT CHECKLIST\n\nBefore finishing, ensure you've:\n1. ✓ Directly answered what they asked for\n2. ✓ Led with most important findings for their goal\n3. ✓ Included all relevant intelligence found\n4. ✓ Provided strategic analysis and recommendations\n5. ✓ Connected findings to actionable insights\n6. ✓ Cited sources for factual claims\n7. ✓ Adapted structure to their specific needs\n\n## OUTPUT INSTRUCTION\n\n**Write the report immediately.** No preamble about what you'll do - just start with the report itself. Begin with a compelling executive summary that directly addresses their goal, then organize remaining content by relevance to their specific query.\n\nRemember: Every user query is different. A report about \"Is this company violating animal welfare laws?\" needs a completely different structure than \"How can we pressure this company to change?\" or \"Should we partner with this organization?\" \n\n**Be responsive, be useful, be direct.**","returnIntermediateSteps":true},"promptType":"define","needsFallback":true},"retryOnFail":true,"typeVersion":2.2},{"id":"3fb5ca53-1fe8-42b8-afff-cb61ee357917","name":"Verifying Report","type":"@n8n/n8n-nodes-langchain.chainLlm","position":[4944,1648],"parameters":{"text":"=# 🔍 ORGANIZATION OSINT REPORT VERIFICATION AGENT\n\n## THE CURRENT DATE & TIME IS {{ $now }}\n\n## Mission\nIdentify **only clear factual hallucinations that would materially mislead about the organization**. The report writer creates adaptive, analytically-rich reports - respect this approach. Focus on catching fabricated facts, not questioning analytical insights or strategic assessments.\n\n## Your Inputs\n1. **Final OSINT Report** - The intelligence report (may have adaptive structure based on user query)\n2. **Retrieved Content** - All verified sources\n\n## CRITICAL PRINCIPLE: Support Good Intelligence Writing\n\n### The Report Writer Is Supposed To:\n- **Adapt structure to user needs** - Don't flag non-standard formats\n- **Lead with most relevant findings** - Don't expect rigid section order\n- **Provide strategic analysis** - This is valuable, not hallucination\n- **Draw conclusions from patterns** - Inference from evidence is expected\n- **Make recommendations** - Strategic guidance is the point\n- **Connect dots across sources** - Synthesis is intelligence work\n\n### Only Flag Clear Fabrications:\n- **Invented facts** with no basis in sources\n- **Wrong entities** (wrong company, wrong person)\n- **False events** that didn't happen\n- **Major quantitative errors** (order of magnitude wrong)\n\n## WHAT IS NOT HALLUCINATION\n\n### 1. ADAPTIVE REPORT STRUCTURE\n**Always Acceptable:**\n- Non-standard section headers based on user query\n- Information organized by relevance, not template\n- Starting with campaign opportunities instead of company background\n- Focusing entirely on violations if that's what was asked\n- Omitting sections that aren't relevant to the query\n\n### 2. ANALYTICAL INTELLIGENCE\n**Always Acceptable:**\n- \"This vulnerability could be exploited through...\"\n- \"The pattern suggests systemic issues with...\"\n- \"Strategic pressure points include...\"\n- \"Coalition opportunities exist with...\"\n- \"The company appears vulnerable to...\"\n- \"This creates an opportunity for...\"\n\n### 3. PATTERN RECOGNITION\n**Always Acceptable:**\n- \"Multiple violations indicate a pattern of...\"\n- \"The technology stack suggests dependence on...\"\n- \"Their growth trajectory implies...\"\n- \"Market position makes them susceptible to...\"\n- \"Corporate structure reveals...\"\n\n### 4. STRATEGIC RECOMMENDATIONS\n**Always Acceptable:**\n- Campaign tactics and timing\n- Pressure point identification\n- Stakeholder influence strategies\n- Coalition building suggestions\n- Messaging frameworks\n- Tactical approaches\n\n### 5. REASONABLE BUSINESS INFERENCES\n**Always Acceptable:**\n- Standard industry practices applied to this company\n- Typical vulnerabilities for their sector\n- Expected partnerships based on tech stack\n- Likely decision-making structures\n- Common compliance challenges for their industry\n\n## ACTUAL HALLUCINATIONS TO FLAG\n\n### 1. FABRICATED ENTITIES OR EVENTS\n**Must Flag Only If Completely False:**\n- Company never existed or is wrong company\n- Executive names that are fabricated\n- Legal cases that never happened\n- Violations that are entirely fictional\n- Acquisitions that didn't occur\n\n**Don't Flag:**\n- Paraphrased descriptions of real events\n- Summarized violations that capture essence\n- Combined information from multiple sources\n\n### 2. MAJOR QUANTITATIVE ERRORS\n**Must Flag Only If Materially Wrong:**\n- Revenue off by order of magnitude ($10M vs $1B)\n- Employee count drastically wrong (50 vs 5,000)\n- Founded date off by decade or more\n- Number of violations vastly wrong (1 vs 20)\n\n**Don't Flag:**\n- Reasonable ranges (\"$10-50M\" from BuiltWith)\n- Approximations (\"approximately 1,000\" for 978)\n- Minor rounding (\"nearly 500\" for 487)\n- Vague quantifiers (\"multiple,\" \"several\")\n\n### 3. WRONG CORE FACTS\n**Must Flag Only If Fundamentally Wrong:**\n- Wrong industry or business model entirely\n- Incorrect ownership (public vs private)\n- Wrong headquarters country\n- False core technology (AWS vs Azure if strategic)\n\n**Don't Flag:**\n- Inferred capabilities from business type\n- Assumed standard technologies\n- Regional presence from evidence\n- Market position assessments\n\n## VERIFICATION APPROACH FOR ADAPTIVE REPORTS\n\n### Understand the User's Query First\nBefore verifying, consider:\n- What did the user ask for?\n- Is the report structure responsive to that?\n- Are emphasized points relevant to the query?\n- Does the analysis serve the stated goal?\n\n### Apply Context-Aware Verification\n- **For campaign planning:** Strategic analysis is core, not hallucination\n- **For violation investigation:** Focus on accuracy of violations\n- **For partnership assessment:** Evaluative judgments are expected\n- **For pressure mapping:** Vulnerability analysis is the point\n\n### Respect Intelligence Methodology\n- Connecting dots across sources is valid\n- Pattern identification is intelligence work\n- Strategic assessment is expected output\n- Recommendations don't need source citations\n\n## SIMPLIFIED DECISION TREE\n\nFor each potential issue:\n\n1. **Is it strategic analysis or recommendation?**\n   - YES → Never flag (this is the point of the report)\n   - NO → Continue\n\n2. **Is it a reasonable inference from evidence?**\n   - YES → Don't flag\n   - NO → Continue\n\n3. **Is it materially false (not just imprecise)?**\n   - NO → Don't flag\n   - YES → Continue\n\n4. **Would it actually mislead about the organization?**\n   - NO → Don't flag\n   - YES → FLAG IT\n\n## OUTPUT FORMAT\n\nOnly flag clear, material hallucinations:\n\n```\nHALLUCINATION #[X]:\n**False Claim:** \"[Exact quote]\"\n**Why It's False:** [Not just missing, but demonstrably wrong]\n**Material Impact:** [How this would mislead decisions]\n**Severity:** [Only use Critical or Significant - no Minor flags]\n```\n\n### Summary:\n```\nVERIFICATION COMPLETE\nMaterial Hallucinations: [X]\nReport Assessment: [Reliable with minor issues / Needs correction / Generally accurate]\n\nNote: Strategic analysis and recommendations are features, not bugs.\n```\n\n## EXAMPLES - BE VERY PERMISSIVE\n\n### NEVER Flag These (All Acceptable):\n- \"The company's dependence on AWS creates a single point of failure\"\n- \"This pattern of violations suggests systemic cultural issues\"\n- \"CEO's public statements conflict with operational reality\"\n- \"Revenue of $10-50M\" (when BuiltWith shows this range)\n- \"Approximately 500 employees\" (even if sources say 400-600)\n- \"Vulnerable to reputational campaigns given their B2C focus\"\n- \"Should target their board members with shareholder resolutions\"\n- \"Coalition opportunity with environmental groups\"\n- \"Founded in the early 2000s\" (for 2003)\n- \"Growing tech company\" (general characterization)\n- \"Likely uses standard industry practices\"\n- \"Would benefit from transparency initiatives\"\n\n### ONLY Flag These Clear Errors:\n- \"Founded in 1990\" (when actually 2010 - major error)\n- \"CEO John Smith\" (when CEO is Jane Doe - wrong person)\n- \"Revenue of $5B\" (when actually $5M - magnitude error)\n- \"Acquired by Google in 2020\" (never happened)\n- \"FDA shut down their main facility\" (if this didn't happen)\n- \"50,000 employees\" (when actually 500)\n\n## CRITICAL REMINDERS\n\n1. **The report's job is to be useful** - Don't punish usefulness\n2. **Analysis is not hallucination** - It's the core value\n3. **Adaptive structure is good** - Don't expect rigid formats\n4. **Strategic recommendations are expected** - Never flag these\n5. **Minor imprecision is acceptable** - Focus on material errors\n6. **When in doubt, don't flag** - We want rich, analytical reports\n\n## FINAL INSTRUCTION\n\nBe extremely permissive. Only flag things that are clearly, demonstrably false and would materially mislead someone making decisions about this organization. Remember: a report full of strategic insights, vulnerability analysis, and campaign recommendations is doing exactly what it should do.\n\n# RETRIEVED DOCUMENTS\n{{ \n  (() => {\n    const docs = $json['Retrieved Documents'] || '';\n    // 2.4M chars (~600K tokens) - BuiltWith data, OpenCorporates, court records, violations\n    const maxChars = 2400000;\n    const processedDocs = typeof docs === 'string' ? docs : JSON.stringify(docs, null, 1);\n    \n    if (processedDocs.length > maxChars) {\n      // Try to truncate at a natural boundary for organization data\n      let truncPoint = maxChars;\n      const boundaries = [\n        processedDocs.lastIndexOf('\\n\\n', maxChars),          // Section break\n        processedDocs.lastIndexOf('}\\n{', maxChars),          // Between JSON objects\n        processedDocs.lastIndexOf('\\n##', maxChars),          // Markdown section\n        processedDocs.lastIndexOf('Company:', maxChars),      // Company boundary\n        processedDocs.lastIndexOf('Violation:', maxChars),    // Violation section\n        processedDocs.lastIndexOf('Technology:', maxChars),   // Tech stack section\n        processedDocs.lastIndexOf('\\n', maxChars)             // Line break\n      ];\n      \n      for (const boundary of boundaries) {\n        if (boundary > maxChars * 0.95) {\n          truncPoint = boundary + 1;\n          break;\n        }\n      }\n      \n      return processedDocs.substring(0, truncPoint) + \n        '\\n\\n... [TRUNCATED - Verify only visible portion]';\n    }\n    return processedDocs;\n  })()\n}}\n\n# FINAL OSINT REPORT TO VERIFY\n{{ \n  (() => {\n    const report = $json['Final Report'] || '';\n    // 800K chars (~200K tokens) - full campaign intelligence report\n    const maxChars = 800000;\n    const processedReport = typeof report === 'string' ? report : JSON.stringify(report, null, 1);\n    \n    if (processedReport.length > maxChars) {\n      // Try to truncate at a natural boundary for campaign reports\n      let truncPoint = maxChars;\n      const boundaries = [\n        processedReport.lastIndexOf('\\n## ', maxChars),       // Major section\n        processedReport.lastIndexOf('\\n### ', maxChars),      // Subsection\n        processedReport.lastIndexOf('Campaign', maxChars),    // Campaign sections\n        processedReport.lastIndexOf('Vulnerability', maxChars), // Vulnerability sections\n        processedReport.lastIndexOf('\\n**', maxChars),        // Bold headers\n        processedReport.lastIndexOf('\\n\\n', maxChars),        // Paragraph break\n        processedReport.lastIndexOf('. ', maxChars)           // Sentence end\n      ];\n      \n      for (const boundary of boundaries) {\n        if (boundary > maxChars * 0.9) {\n          truncPoint = boundary + 1;\n          break;\n        }\n      }\n      \n      return processedReport.substring(0, truncPoint) + \n        '\\n\\n... [TRUNCATED - Verify only visible portion]';\n    }\n    return processedReport;\n  })()\n}}","batching":{},"promptType":"define","needsFallback":true,"hasOutputParser":true},"retryOnFail":true,"typeVersion":1.7},{"id":"abd8533b-ae4e-4283-94f4-c83b76c44c76","name":"If Source is Webhook","type":"n8n-nodes-base.if","position":[6432,1648],"parameters":{"options":{},"conditions":{"options":{"version":3,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"6f78d9d5-176a-4660-8e24-f516502127ae","operator":{"name":"filter.operator.equals","type":"string","operation":"equals"},"leftValue":"={{ $('Set Prompt').item.json.source }}","rightValue":"webhook"}]}},"typeVersion":2.3},{"id":"8580b597-63cf-4e2d-a80a-570bdd3bb509","name":"Set Output1","type":"n8n-nodes-base.set","position":[6624,1728],"parameters":{"options":{},"assignments":{"assignments":[{"id":"b943ce2b-92a7-4fb5-b49a-df2894d5e445","name":"report","type":"string","value":"={{ $('Set Report').item.json['Final Report'] }}"}]}},"typeVersion":3.4},{"id":"f519a9f0-9866-404e-8ab9-7a97f2609c63","name":"Respond to Webhook","type":"n8n-nodes-base.respondToWebhook","position":[6624,1536],"parameters":{"options":{"enableStreaming":true},"respondWith":"json","responseBody":"={{ JSON.stringify($json) }}"},"typeVersion":1.5},{"id":"0755334c-3075-4548-b0ed-d44b14752c4c","name":"Set Report1","type":"n8n-nodes-base.set","position":[6224,1648],"parameters":{"options":{},"assignments":{"assignments":[{"id":"b943ce2b-92a7-4fb5-b49a-df2894d5e445","name":"report","type":"string","value":"={{ $('Set Report').item.json['Final Report'] }}"}]}},"typeVersion":3.4},{"id":"bdaf02d7-b863-4105-8271-761915d3b4f6","name":"Sticky Note2","type":"n8n-nodes-base.stickyNote","position":[-496,656],"parameters":{"color":2,"width":1200,"height":656,"content":"# Research organizations using AI with public data sources and report generation\n\n## How it works\n\nThis workflow performs structured research on an organization using publicly\navailable information. It collects data from multiple public web and document\nsources, evaluates the relevance of each source, and synthesizes the findings\ninto a clear, structured report.\n\nThe workflow follows a step-by-step research process: gathering information,\norganizing key details, and verifying claims to reduce incorrect or unsupported\nstatements. If issues are detected, the workflow attempts to refine the output\nbefore returning the final result.\n\nThe final output is a clean Markdown report that can be used for analysis,\ndocumentation, or as input to downstream workflows.\n\n## Setup steps\n\n1. Add your AI provider credentials.\n2. Configure any public data or web search APIs used in the workflow.\n3. Choose how the workflow is triggered (Webhook or Execute Workflow).\n4. Activate the workflow and send an organization name or research request."},"typeVersion":1},{"id":"dcafa522-0f1c-410a-85fa-9c3e35a78aea","name":"Sticky Note5","type":"n8n-nodes-base.stickyNote","position":[832,2272],"parameters":{"color":7,"width":304,"height":112,"content":"### Please refer [Open Paws Guide](https://github.com/Open-Paws/documentation/tree/main/Knowledge) to know how to use our open-source vector database"},"typeVersion":1},{"id":"9b10885b-9a60-45a5-ba98-c4be3d511bc9","name":"Sticky Note6","type":"n8n-nodes-base.stickyNote","position":[1376,2320],"parameters":{"color":7,"width":576,"height":304,"content":"## 🟤 Prioritizing Sources\n\nThis stage analyzes all raw OSINT signals and determines which sources are\nmost likely to contain high-value, verifiable information.\n\nThe agent:\n• Scores each discovered source  \n• Identifies which ones to investigate first  \n• Uses LLM reasoning and fallback logic for reliability  \n\nIf no strong leads are found, a retry path is triggered.\n"},"typeVersion":1},{"id":"22a1dc70-4a17-44d6-b74f-05906c9aed95","name":"Sticky Note7","type":"n8n-nodes-base.stickyNote","position":[2624,2384],"parameters":{"color":7,"width":608,"height":288,"content":"## 🟤 Investigating Sources Further\n\nThis stage performs deeper, second-pass OSINT investigation.\n\nThe agent:\n• Extracts detailed information from each prioritized source  \n• Uses scraping, document retrieval, and profile lookups  \n• Validates and enriches initial findings  \n• Ensures claims are supported before writing the final report  \n\nIf tools fail or return incomplete data, fallback tools are triggered.\n"},"typeVersion":1},{"id":"2bce7e80-44eb-4946-ab46-7c0420b6c31e","name":"Sticky Note13","type":"n8n-nodes-base.stickyNote","position":[3952,2032],"parameters":{"color":7,"width":672,"height":304,"content":"## ✍️ Writing Report Agent\n\nThis agent is responsible for transforming **raw research signals** into a **clear, structured, human-readable report**.\n\nAfter the research tools return their findings, the Writing Report Agent:\n\n* Analyzes and prioritizes the most relevant information\n* Synthesizes insights across multiple sources\n* Organizes content into logical sections\n* Writes the report in clean **Markdown format**"},"typeVersion":1},{"id":"20a35609-422d-4808-9e3b-1ba3a77f4fcd","name":"Sticky Note14","type":"n8n-nodes-base.stickyNote","position":[4688,2064],"parameters":{"color":7,"width":672,"height":272,"content":"## 🔍 Verifying Report Agent\n\nThis agent acts as a **quality control and fact-checking layer**.\n\nOnce the initial report is written, the Verifying Report Agent:\n\n* Reviews claims made in the draft report\n* Checks for internal consistency and logical coherence\n* Evaluates whether conclusions are supported by the research inputs\n* Flags areas that appear weak, vague, or potentially unsupported"},"typeVersion":1},{"id":"9cb1880c-c7ec-4371-8f1a-b8139242cbbb","name":"Sticky Note15","type":"n8n-nodes-base.stickyNote","position":[5456,2080],"parameters":{"color":7,"width":736,"height":336,"content":"## 🧯 Fixing Hallucinations Agent\n\nThis agent is activated **only when issues are detected** during verification.\n\nIf the Verifying Report Agent identifies hallucinations, unsupported claims, or logical gaps, the Fixing Hallucinations Agent:\n\n* Revisits the original research inputs\n* Removes or corrects unsupported statements\n* Rewrites affected sections with more conservative, evidence-backed language\n* Ensures the final output aligns strictly with available information\n"},"typeVersion":1},{"id":"374b7aa8-0d9a-4890-967f-1ac42ef56058","name":"Sticky Note9","type":"n8n-nodes-base.stickyNote","position":[848,656],"parameters":{"color":7,"width":736,"height":688,"content":"## 🔐 Credentials Required\n\nThis workflow uses several external OSINT and data-gathering tools that require API credentials:\n\n- **OpenRouter API Key**  \n  Used for LLM reasoning, prioritizing sources, deep investigation, and report writing.\n\n- **Serper API**  \n  Used for real-time web search and discovery of publicly available information.\n\n- **LegiScan API**  \n  Retrieves legislative records, bill histories, and government activity related to the organization.\n\n- **CourtListener API Key**  \n  Fetches federal court filings, legal documents, and public litigation data.\n\n- **OpenCorporates API Key**  \n  Provides corporate registry information, company structure, and global entity records.\n\n- **Jina URL Reader**  \n  Extracts readable text from web pages for OSINT analysis.\n\n- **ScrapingDog API Key**  \n  Scrapes public content from social profiles and websites (e.g., LinkedIn, Twitter, Instagram).\n\n- **BuiltWith API Key**  \n  Reveals the technology stack used by the organization’s website.\n\nNo credentials are included in this template.  \nYou must add and configure your own credentials after importing the workflow.\n"},"typeVersion":1},{"id":"d38e3988-60b3-439d-9a2b-92e6b6343e30","name":"Open Corporates1","type":"n8n-nodes-base.httpRequestTool","position":[928,2080],"parameters":{"url":"={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}","options":{"batching":{"batch":{"batchSize":1}}},"authentication":"genericCredentialType","genericAuthType":"httpQueryAuth","toolDescription":"=# OpenCorporates API\n\n## What & Why\n**What:** Global corporate registry database with ownership, officers, filings  \n**Use when:** Need company info, ownership networks, directors, corporate structure, subsidiaries, beneficial ownership, industry classification, regulatory filings, trademark data\n\n**Base:** `https://api.opencorporates.com/v0.4/`  \n**Auth:** Handled by system  \n**Limits:** per_page=100 max, page=100 max\n\n## Core Endpoints & Functionality\n\n### 1. Company Search\n```\nhttps://api.opencorporates.com/v0.4/companies/search?q=tyson%20foods\nhttps://api.opencorporates.com/v0.4/companies/search?q=cargill&jurisdiction_code=us\nhttps://api.opencorporates.com/v0.4/companies/search?q=meat&industry_codes=us_naics_2017-311611\nhttps://api.opencorporates.com/v0.4/companies/search?q=agriculture&incorporation_date=2020-01-01:\nhttps://api.opencorporates.com/v0.4/companies/search?q=livestock&registered_address=nebraska\nhttps://api.opencorporates.com/v0.4/companies/search?q=farming&current_status=Active,Dissolved\nhttps://api.opencorporates.com/v0.4/companies/search?q=meat&inactive=false&branch=false\nhttps://api.opencorporates.com/v0.4/companies/search?q=agriculture&created_at=2023-01-01:\n```\n**Filters:** `jurisdiction_code`, `country_code`, `company_type`, `current_status`, `registered_address`, `inactive`, `branch`, `nonprofit`, `dissolution_date`, `incorporation_date`, `created_at`, `industry_codes`, `order` (score/incorporation_date)\n\n### 2. Company Profile\n```\nhttps://api.opencorporates.com/v0.4/companies/{jurisdiction_code}/{company_number}\nhttps://api.opencorporates.com/v0.4/companies/us_de/COMPANY_NUMBER_EXAMPLE?sparse=true\nhttps://api.opencorporates.com/v0.4/companies/{j}/{n}/filings\nhttps://api.opencorporates.com/v0.4/companies/{j}/{n}/statements\nhttps://api.opencorporates.com/v0.4/companies/{j}/{n}/data\n```\n\n### 3. Officer Search\n```\nhttps://api.opencorporates.com/v0.4/officers/search?q=john%20smith\nhttps://api.opencorporates.com/v0.4/officers/search?q=smith&position=director,ceo\nhttps://api.opencorporates.com/v0.4/officers/search?q=jones&jurisdiction_code=us\nhttps://api.opencorporates.com/v0.4/officers/search?q=executive&address=manhattan\nhttps://api.opencorporates.com/v0.4/officers/search?q=brown&date_of_birth=1965-01-01:1970-12-31\nhttps://api.opencorporates.com/v0.4/officers/{OFFICER_ID_EXAMPLE}\n```\n\n### 4. Control Statements (Ownership)\n```\nhttps://api.opencorporates.com/v0.4/statements/control_statements/search?controlled_entity_name=tyson\nhttps://api.opencorporates.com/v0.4/statements/control_statements/search?controlling_entities_name=blackrock\nhttps://api.opencorporates.com/v0.4/statements/control_statements/search?is_ultimate_beneficial_owner=true\nhttps://api.opencorporates.com/v0.4/statements/control_statements/search?control_mechanisms_mechanism_type=ownership,voting_rights\nhttps://api.opencorporates.com/v0.4/statements/control_statements/search?controlling_entities_entity_type=company,person\n```\n\n### 5. Other Statements\n```\nhttps://api.opencorporates.com/v0.4/statements/gazette_notices/search?q=usda\nhttps://api.opencorporates.com/v0.4/statements/gazette_notices/search?jurisdiction_code=us&normalised_classification_level_1=liquidation\nhttps://api.opencorporates.com/v0.4/statements/trademark_registrations/search?q=tyson\nhttps://api.opencorporates.com/v0.4/statements/alternate_registrations/search\nhttps://api.opencorporates.com/v0.4/statements/subsequent_registrations/search\n```\n\n### 6. Industry Codes\n```\nhttps://api.opencorporates.com/v0.4/industry_codes\nhttps://api.opencorporates.com/v0.4/industry_codes/us_naics_2017\nhttps://api.opencorporates.com/v0.4/industry_codes/us_naics_2017/311611\n```\n\n### 7. Other Endpoints\n```\nhttps://api.opencorporates.com/v0.4/filings/{id}\nhttps://api.opencorporates.com/v0.4/statements/{id}\nhttps://api.opencorporates.com/v0.4/placeholders/{id}\nhttps://api.opencorporates.com/v0.4/jurisdictions\nhttps://api.opencorporates.com/v0.4/jurisdictions/match?q=Delaware\nhttps://api.opencorporates.com/v0.4/account_status\n```\n\n## Key Industry Codes (NAICS)\n- **311611**: Cattle slaughter\n- **311612**: Meat processing from carcasses\n- **311615**: Poultry processing\n- **112120**: Dairy cattle/milk\n- **112111**: Beef cattle ranching\n- **112310**: Chicken/egg production\n- **1121**: Cattle ranching/farming\n- **3116**: Animal slaughtering/processing\n\n## Response Structure\n```json\n{\n  \"results\": {\n    \"companies\": [{\n      \"company\": {\n        \"name\": \"...\",\n        \"company_number\": \"...\",\n        \"jurisdiction_code\": \"...\",\n        \"company_type\": \"...\",\n        \"current_status\": \"...\",\n        \"incorporation_date\": \"...\",\n        \"registered_address_in_full\": \"...\",\n        \"industry_codes\": [{\n          \"industry_code\": {\n            \"code\": \"...\",\n            \"description\": \"...\",\n            \"code_scheme_id\": \"...\"\n          }\n        }],\n        \"officers\": [{\n          \"officer\": {\n            \"name\": \"...\",\n            \"position\": \"...\",\n            \"start_date\": \"...\"\n          }\n        }],\n        \"controlling_entity\": {...},\n        \"corporate_groupings\": [...]\n      }\n    }],\n    \"total_count\": X,\n    \"page\": Y,\n    \"per_page\": Z\n  }\n}\n```\n\n## Control Statement Response\n```json\n{\n  \"results\": {\n    \"statements\": [{\n      \"statement\": {\n        \"properties\": {\n          \"controlled_entity\": {...},\n          \"controlling_entities\": [{\n            \"name\": \"...\",\n            \"entity_type\": \"...\",\n            \"percentage_controlled\": \"...\"\n          }],\n          \"control_mechanisms\": [{\n            \"mechanism_type\": \"ownership\",\n            \"description\": \"...\"\n          }]\n        },\n        \"provenances\": [{\n          \"source_url\": \"...\",\n          \"confidence\": 85\n        }]\n      }\n    }]\n  }\n}\n```\n\n## Query Workflow Pattern\n1. **Search** → Get company IDs/numbers\n2. **Profile** → Get full company details\n3. **Network** → Map ownership/officers\n4. **Monitor** → Track filings/changes\n\n**Date format:** YYYY-MM-DD or YYYY-MM-DD:YYYY-MM-DD  \n**Encode:** spaces=%20, quotes=%22"},"credentials":{"httpQueryAuth":{"id":"fGlnFySZXGNkh33B","name":"OpenCorporates API Key"}},"retryOnFail":true,"typeVersion":4.2},{"id":"53b446ec-19d2-480d-b4b8-3cb7cbb1d6fa","name":"Trigger organization research (Webhook)","type":"n8n-nodes-base.executeWorkflowTrigger","position":[-464,1488],"parameters":{"workflowInputs":{"values":[{"name":"companyName"},{"name":"companyDomain"},{"name":"reportGoal"}]}},"typeVersion":1.1},{"id":"5e7a2017-3d26-451e-bfc3-949500f4d831","name":"Trigger organization research from another workflow","type":"n8n-nodes-base.webhook","position":[-464,1696],"webhookId":"9ede5612-d659-481f-be01-2b252b168d09","parameters":{"path":"org-osint","options":{},"httpMethod":"POST"},"typeVersion":2.1}],"active":false,"pinData":{"Trigger organization research (Webhook)":[{"json":{"reportGoal":null,"companyName":null,"companyDomain":null}}],"Trigger organization research from another workflow":[{"json":{"body":[{"reportGoal":"Gather open source intelligence on Tyson Foods including company structure, key executives, recent news, financial information, and any relevant public data","companyName":"Tyson Foods","companyDomain":"tysonfoods.com"}],"query":{},"params":{},"headers":{"host":"n8n.openpaws.ai","accept":"*/*","x-real-ip":"121.200.6.201","connection":"close","user-agent":"curl/8.5.0","content-type":"application/json","content-length":"241","x-forwarded-for":"121.200.6.201","x-forwarded-port":"443","x-forwarded-proto":"https"},"webhookUrl":"https://n8n.openpaws.ai/webhook-test/org-osint","executionMode":"test"}}]},"settings":{"availableInMCP":false,"executionOrder":"v1"},"versionId":"ccbabbc7-f55a-4875-85fa-84a553109d3c","connections":{"GPT-5a":{"ai_languageModel":[[{"node":"Prioritizing Sources","type":"ai_languageModel","index":0}]]},"GPT-5b":{"ai_languageModel":[[{"node":"Writing Report","type":"ai_languageModel","index":0}]]},"GPT-5c":{"ai_languageModel":[[{"node":"Verifying Report","type":"ai_languageModel","index":0}]]},"GPT-5d":{"ai_languageModel":[[{"node":"Step 6: Fixing Hallucinations","type":"ai_languageModel","index":0}]]},"BuiltWith1":{"ai_tool":[[{"node":"Investigating Sources Further","type":"ai_tool","index":0}]]},"Set Prompt":{"main":[[{"node":"Looking for Sources","type":"main","index":0}]]},"Set Report":{"main":[[{"node":"Verifying Report","type":"main","index":0}]]},"Set Report1":{"main":[[{"node":"If Source is Webhook","type":"main","index":0}]]},"Auto Fallback":{"ai_languageModel":[[{"node":"Looking for Sources","type":"ai_languageModel","index":1}]]},"Auto Fallback1":{"ai_languageModel":[[{"node":"Prioritizing Sources","type":"ai_languageModel","index":1}]]},"Auto Fallback2":{"ai_languageModel":[[{"node":"Investigating Sources Further","type":"ai_languageModel","index":1}]]},"Auto Fallback3":{"ai_languageModel":[[{"node":"Writing Report","type":"ai_languageModel","index":1}]]},"Auto Fallback4":{"ai_languageModel":[[{"node":"Verifying Report","type":"ai_languageModel","index":1},{"node":"Structured Output Parser","type":"ai_languageModel","index":0}]]},"Auto Fallback5":{"ai_languageModel":[[{"node":"Step 6: Fixing Hallucinations","type":"ai_languageModel","index":1}]]},"Writing Report":{"main":[[{"node":"Retry if Response Empty1","type":"main","index":0}]]},"If Empty Output":{"main":[[{"node":"Set Report","type":"main","index":0},{"node":"Step 6: Fixing Hallucinations","type":"main","index":0}],[{"node":"Set Report","type":"main","index":0}]]},"Gemini 2.5 Flash":{"ai_languageModel":[[{"node":"Looking for Sources","type":"ai_languageModel","index":0}]]},"If Empty Output1":{"main":[[{"node":"Verifying Report","type":"main","index":0}],[{"node":"If hallucinations present","type":"main","index":0}]]},"Open Corporates1":{"ai_tool":[[{"node":"Looking for Sources","type":"ai_tool","index":0}]]},"Open Corporates2":{"ai_tool":[[{"node":"Investigating Sources Further","type":"ai_tool","index":0}]]},"Verifying Report":{"main":[[{"node":"If Empty Output1","type":"main","index":0}]]},"Gemini 2.5 Flash2":{"ai_languageModel":[[{"node":"Investigating Sources Further","type":"ai_languageModel","index":0}]]},"Embeddings OpenAI2":{"ai_embedding":[[{"node":"Search Open Paws Database2","type":"ai_embedding","index":0}]]},"LegiScan Discovery":{"ai_tool":[[{"node":"Looking for Sources","type":"ai_tool","index":0}]]},"LegiScan Retrieval":{"ai_tool":[[{"node":"Investigating Sources Further","type":"ai_tool","index":0}]]},"Looking for Sources":{"main":[[{"node":"Retry if Tools Not Used","type":"main","index":0}]]},"Think Tool Analysis":{"ai_tool":[[{"node":"Writing Report","type":"ai_tool","index":0}]]},"If Source is Webhook":{"main":[[{"node":"Respond to Webhook","type":"main","index":0}],[{"node":"Set Output1","type":"main","index":0}]]},"Prioritizing Sources":{"main":[[{"node":"Retry if Response Empty","type":"main","index":0}]]},"Think Tool Analysis2":{"ai_tool":[[{"node":"Step 6: Fixing Hallucinations","type":"ai_tool","index":0}]]},"DocumentCloud Dsicovery":{"ai_tool":[[{"node":"Looking for Sources","type":"ai_tool","index":0}]]},"DocumentCloud Retrieval":{"ai_tool":[[{"node":"Investigating Sources Further","type":"ai_tool","index":0}]]},"Google Search Discovery":{"ai_tool":[[{"node":"Looking for Sources","type":"ai_tool","index":0}]]},"Retry if Response Empty":{"main":[[{"node":"Prioritizing Sources","type":"main","index":0}],[{"node":"Investigating Sources Further","type":"main","index":0}]]},"Retry if Tools Not Used":{"main":[[{"node":"Looking for Sources","type":"main","index":0}],[{"node":"Prioritizing Sources","type":"main","index":0}]]},"Court Listener Discovery":{"ai_tool":[[{"node":"Looking for Sources","type":"ai_tool","index":0}]]},"Jina URL Text Extraction":{"ai_tool":[[{"node":"Investigating Sources Further","type":"ai_tool","index":0}]]},"Retry if Response Empty1":{"main":[[{"node":"Writing Report","type":"main","index":0}],[{"node":"Set Report","type":"main","index":0}]]},"Retry if Tools Not Used1":{"main":[[{"node":"Investigating Sources Further","type":"main","index":0}],[{"node":"Writing Report","type":"main","index":0}]]},"Structured Output Parser":{"ai_outputParser":[[{"node":"Verifying Report","type":"ai_outputParser","index":0}]]},"Twitter Profile Scraper1":{"ai_tool":[[{"node":"Investigating Sources Further","type":"ai_tool","index":0}]]},"Court Listener Retrieveal":{"ai_tool":[[{"node":"Investigating Sources Further","type":"ai_tool","index":0}]]},"If hallucinations present":{"main":[[{"node":"Step 6: Fixing Hallucinations","type":"main","index":0}],[{"node":"Set Report1","type":"main","index":0}]]},"Think Tool Prioritization":{"ai_tool":[[{"node":"Prioritizing Sources","type":"ai_tool","index":0}]]},"Instagram Profile Scraper1":{"ai_tool":[[{"node":"Investigating Sources Further","type":"ai_tool","index":0}]]},"Search Open Paws Database2":{"ai_tool":[[{"node":"Looking for Sources","type":"ai_tool","index":0}]]},"Investigating Sources Further":{"main":[[{"node":"Retry if Tools Not Used1","type":"main","index":0}]]},"Step 6: Fixing Hallucinations":{"main":[[{"node":"If Empty Output","type":"main","index":0}]]},"Linkedin Person and Company Scraper1":{"ai_tool":[[{"node":"Investigating Sources Further","type":"ai_tool","index":0}]]},"Trigger organization research (Webhook)":{"main":[[{"node":"Set Prompt","type":"main","index":0}]]},"Trigger organization research from another workflow":{"main":[[{"node":"Set Prompt","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":61,"nodeTypes":{"n8n-nodes-base.if":{"count":8},"n8n-nodes-base.set":{"count":4},"n8n-nodes-base.webhook":{"count":1},"n8n-nodes-base.jinaAiTool":{"count":1},"n8n-nodes-base.stickyNote":{"count":8},"@n8n/n8n-nodes-langchain.agent":{"count":5},"n8n-nodes-base.httpRequestTool":{"count":9},"n8n-nodes-base.respondToWebhook":{"count":1},"@n8n/n8n-nodes-langchain.chainLlm":{"count":1},"@n8n/n8n-nodes-langchain.toolThink":{"count":3},"n8n-nodes-base.executeWorkflowTrigger":{"count":1},"@n8n/n8n-nodes-langchain.toolHttpRequest":{"count":4},"@n8n/n8n-nodes-langchain.embeddingsOpenAi":{"count":1},"@n8n/n8n-nodes-langchain.lmChatOpenRouter":{"count":12},"@n8n/n8n-nodes-langchain.vectorStoreWeaviate":{"count":1},"@n8n/n8n-nodes-langchain.outputParserStructured":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Open Paws","username":"openpaws","bio":"Open Paws is a nonprofit building open-source AI tools to accelerate animal advocacy. \n\nWe create machine learning models and automation workflows trained on real-world campaign data to help end industrial animal exploitation. \n\nAll tools are free, transparent, and designed for real-world impact.","verified":true,"links":["https://www.openpaws.ai/"],"avatar":"https://gravatar.com/avatar/c23bc104617a5a562fe9efe0dad98e78652efd6171b81a960cbbcdf236d09cc8?r=pg&d=retro&size=200"},"nodes":[{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":38,"icon":"fa:pen","name":"n8n-nodes-base.set","codex":{"data":{"alias":["Set","JS","JSON","Filter","Transform","Map"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/database-monitoring-and-alerting-with-n8n/","icon":"📡","label":"Database Monitoring and Alerting with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Data Transformation"]}}},"group":"[\"input\"]","defaults":{"name":"Edit Fields"},"iconData":{"icon":"pen","type":"icon"},"displayName":"Edit Fields (Set)","typeVersion":3,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":47,"icon":"file:webhook.svg","name":"n8n-nodes-base.webhook","codex":{"data":{"alias":["HTTP","API","Build","WH"],"resources":{"generic":[{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/the-ultimate-guide-to-automate-your-video-collaboration-with-whereby-mattermost-and-n8n/","icon":"📹","label":"The ultimate guide to automate your video collaboration with Whereby, Mattermost, and n8n"},{"url":"https://n8n.io/blog/how-to-automatically-give-kudos-to-contributors-with-github-slack-and-n8n/","icon":"👏","label":"How to automatically give kudos to contributors with GitHub, Slack, and n8n"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/creating-custom-incident-response-workflows-with-n8n/","label":"How to automate every step of an incident response workflow"},{"url":"https://n8n.io/blog/learn-to-build-powerful-api-endpoints-using-webhooks/","icon":"🧰","label":"Learn to Build Powerful API Endpoints Using Webhooks"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Webhook","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":535,"icon":"file:webhook.svg","name":"n8n-nodes-base.respondToWebhook","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.respondtowebhook/"}]},"categories":["Core Nodes","Utility"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"transform\"]","defaults":{"name":"Respond to Webhook"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0OCIgaGVpZ2h0PSI0OCI+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTM1IDM3Yy0yLjIgMC00LTEuOC00LTRzMS44LTQgNC00IDQgMS44IDQgNC0xLjggNC00IDQiLz48cGF0aCBmaWxsPSIjMzc0NzRmIiBkPSJNMzUgNDNjLTMgMC01LjktMS40LTcuOC0zLjdsMy4xLTIuNWMxLjEgMS40IDIuOSAyLjMgNC43IDIuMyAzLjMgMCA2LTIuNyA2LTZzLTIuNy02LTYtNmMtMSAwLTIgLjMtMi45LjdsLTEuNyAxTDIzLjMgMTZsMy41LTEuOSA1LjMgOS40YzEtLjMgMi0uNSAzLS41IDUuNSAwIDEwIDQuNSAxMCAxMFM0MC41IDQzIDM1IDQzIi8+PHBhdGggZmlsbD0iIzM3NDc0ZiIgZD0iTTE0IDQzQzguNSA0MyA0IDM4LjUgNCAzM2MwLTQuNiAzLjEtOC41IDcuNS05LjdsMSAzLjlDOS45IDI3LjkgOCAzMC4zIDggMzNjMCAzLjMgMi43IDYgNiA2czYtMi43IDYtNnYtMmgxNXY0SDIzLjhjLS45IDQuNi01IDgtOS44IDgiLz48cGF0aCBmaWxsPSIjZTkxZTYzIiBkPSJNMTQgMzdjLTIuMiAwLTQtMS44LTQtNHMxLjgtNCA0LTQgNCAxLjggNCA0LTEuOCA0LTQgNCIvPjxwYXRoIGZpbGw9IiMzNzQ3NGYiIGQ9Ik0yNSAxOWMtMi4yIDAtNC0xLjgtNC00czEuOC00IDQtNCA0IDEuOCA0IDQtMS44IDQtNCA0Ii8+PHBhdGggZmlsbD0iI2U5MWU2MyIgZD0ibTE1LjcgMzQtMy40LTIgNS45LTkuN2MtMi0xLjktMy4yLTQuNS0zLjItNy4zIDAtNS41IDQuNS0xMCAxMC0xMHMxMCA0LjUgMTAgMTBjMCAuOS0uMSAxLjctLjMgMi41bC0zLjktMWMuMS0uNS4yLTEgLjItMS41IDAtMy4zLTIuNy02LTYtNnMtNiAyLjctNiA2YzAgMi4xIDEuMSA0IDIuOSA1LjFsMS43IDF6Ii8+PC9zdmc+"},"displayName":"Respond to Webhook","typeVersion":2,"nodeCategories":[{"id":7,"name":"Utility"},{"id":9,"name":"Core Nodes"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":837,"icon":"fa:sign-out-alt","name":"n8n-nodes-base.executeWorkflowTrigger","codex":{"data":{"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.executeworkflowtrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"trigger\"]","defaults":{"name":"When Executed by Another Workflow","color":"#ff6d5a"},"iconData":{"icon":"sign-out-alt","type":"icon"},"displayName":"Execute Workflow Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":1119,"icon":"fa:robot","name":"@n8n/n8n-nodes-langchain.agent","codex":{"data":{"alias":["LangChain","Chat","Conversational","Plan and Execute","ReAct","Tools"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.agent/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Agents","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"AI Agent","color":"#404040"},"iconData":{"icon":"robot","type":"icon"},"displayName":"AI Agent","typeVersion":3,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1123,"icon":"fa:link","name":"@n8n/n8n-nodes-langchain.chainLlm","codex":{"data":{"alias":["LangChain"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.chainllm/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Chains","Root Nodes"]}}},"group":"[\"transform\"]","defaults":{"name":"Basic LLM Chain","color":"#909298"},"iconData":{"icon":"link","type":"icon"},"displayName":"Basic LLM Chain","typeVersion":2,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1141,"icon":"file:openAiLight.svg","name":"@n8n/n8n-nodes-langchain.embeddingsOpenAi","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.embeddingsopenai/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Embeddings"]}}},"group":"[\"transform\"]","defaults":{"name":"Embeddings OpenAI"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTM2Ljg2NzEgMTYuMzcxOEMzNy43NzQ2IDEzLjY0OCAzNy40NjIxIDEwLjY2NDIgMzYuMDEwOCA4LjE4NjYxQzMzLjgyODIgNC4zODY1MyAyOS40NDA3IDIuNDMxNDkgMjUuMTU1NiAzLjM1MTUxQzIzLjI0OTMgMS4yMDM5NiAyMC41MTA1IC0wLjAxNzMxNDggMTcuNjM5MiAwLjAwMDE4NTUzM0MxMy4yNTkxIC0wLjAwOTgxNDY4IDkuMzcyNzMgMi44MTAyNSA4LjAyNTIgNi45Nzc4M0M1LjIxMTM5IDcuNTU0MSAyLjc4MjU4IDkuMzE1MzggMS4zNjEzIDExLjgxMTdDLTAuODM3NDkzIDE1LjYwMTggLTAuMzM2MjMyIDIwLjM3OTQgMi42MDEzMyAyMy42Mjk0QzEuNjkzODEgMjYuMzUzMiAyLjAwNjMyIDI5LjMzNzEgMy40NTc2IDMxLjgxNDZDNS42NDAxNSAzNS42MTQ3IDEwLjAyNzcgMzcuNTY5NyAxNC4zMTI4IDM2LjY0OTdDMTYuMjE3OSAzOC43OTczIDE4Ljk1NzkgNDAuMDE4NSAyMS44MjkyIDM5Ljk5OThDMjYuMjExOCA0MC4wMTEgMzAuMDk5NCAzNy4xODg1IDMxLjQ0NjkgMzMuMDE3MUMzNC4yNjA4IDMyLjQ0MDkgMzYuNjg5NiAzMC42Nzk2IDM4LjExMDggMjguMTgzM0M0MC4zMDcxIDI0LjM5MzIgMzkuODA0NiAxOS42MTk0IDM2Ljg2ODMgMTYuMzY5M0wzNi44NjcxIDE2LjM3MThaTTIxLjgzMTcgMzcuMzg2QzIwLjA3OCAzNy4zODg1IDE4LjM3OTIgMzYuNzc0NyAxNy4wMzI5IDM1LjY1MDlDMTcuMDk0MSAzNS42MTg0IDE3LjIwMDQgMzUuNTU5NyAxNy4yNjkxIDM1LjUxNzJMMjUuMjM0MyAzMC45MTcxQzI1LjY0MTggMzAuNjg1OCAyNS44OTE4IDMwLjI1MjEgMjUuODg5MyAyOS43ODMzVjE4LjU1NDNMMjkuMjU1NyAyMC40OTgxQzI5LjI5MTkgMjAuNTE1NiAyOS4zMTU3IDIwLjU1MDYgMjkuMzIwNyAyMC41OTA2VjI5Ljg4OTZDMjkuMzE1NyAzNC4wMjQ3IDI1Ljk2NjggMzcuMzc3MiAyMS44MzE3IDM3LjM4NlpNNS43MjY0IDMwLjUwNzFDNC44NDc2MyAyOC45ODk2IDQuNTMxMzcgMjcuMjEwOCA0LjgzMjYzIDI1LjQ4NDVDNC44OTEzOCAyNS41MTk1IDQuOTk1MTMgMjUuNTgzMiA1LjA2ODg4IDI1LjYyNTdMMTMuMDM0MSAzMC4yMjU4QzEzLjQzNzggMzAuNDYyMSAxMy45Mzc4IDMwLjQ2MjEgMTQuMzQyOCAzMC4yMjU4TDI0LjA2NjggMjQuNjEwN1YyOC40OTgzQzI0LjA2OTMgMjguNTM4MyAyNC4wNTA1IDI4LjU3NyAyNC4wMTkzIDI4LjYwMkwxNS45Njc5IDMzLjI1MDlDMTIuMzgxNSAzNS4zMTU5IDcuODAxNDQgMzQuMDg4NCA1LjcyNzY1IDMwLjUwNzFINS43MjY0Wk0zLjYzMDEgMTMuMTIwNUM0LjUwNTEyIDExLjYwMDQgNS44ODY0IDEwLjQzNzkgNy41MzE0NCA5LjgzNDE1QzcuNTMxNDQgOS45MDI5IDcuNTI3NjkgMTAuMDI0MiA3LjUyNzY5IDEwLjEwOTJWMTkuMzEwNkM3LjUyNTE5IDE5Ljc3ODEgNy43NzUxOSAyMC4yMTE5IDguMTgxNDUgMjAuNDQzMUwxNy45MDU0IDI2LjA1N0wxNC41MzkxIDI4LjAwMDhDMTQuNTA1MyAyOC4wMjMzIDE0LjQ2MjggMjguMDI3IDE0LjQyNTMgMjguMDEwOEw2LjM3MjY2IDIzLjM1ODJDMi43OTM4MyAyMS4yODU2IDEuNTY2MzEgMTYuNzA2OCAzLjYyODg1IDEzLjEyMTdMMy42MzAxIDEzLjEyMDVaTTMxLjI4ODIgMTkuNTU2OUwyMS41NjQyIDEzLjk0MTdMMjQuOTMwNiAxMS45OTkyQzI0Ljk2NDMgMTEuOTc2NyAyNS4wMDY4IDExLjk3MjkgMjUuMDQ0MyAxMS45ODkyTDMzLjA5NyAxNi42MzhDMzYuNjgyMSAxOC43MDkzIDM3LjkxMDggMjMuMjk1NyAzNS44Mzk1IDI2Ljg4MDhDMzQuOTYzMyAyOC4zOTgzIDMzLjU4MzIgMjkuNTYwOCAzMS45Mzk1IDMwLjE2NThWMjAuNjg5NEMzMS45NDMyIDIwLjIyMTkgMzEuNjk0NSAxOS43ODk0IDMxLjI4OTQgMTkuNTU2OUgzMS4yODgyWk0zNC42MzgzIDE0LjUxNDJDMzQuNTc5NSAxNC40NzggMzQuNDc1OCAxNC40MTU1IDM0LjQwMiAxNC4zNzNMMjYuNDM2OCA5Ljc3Mjg5QzI2LjAzMzEgOS41MzY2NCAyNS41MzMxIDkuNTM2NjQgMjUuMTI4MSA5Ljc3Mjg5TDE1LjQwNDEgMTUuMzg4VjExLjUwMDRDMTUuNDAxNiAxMS40NjA0IDE1LjQyMDQgMTEuNDIxNyAxNS40NTE2IDExLjM5NjdMMjMuNTAzIDYuNzUxNThDMjcuMDg5NCA0LjY4Mjc5IDMxLjY3NDUgNS45MTQwNiAzMy43NDIgOS41MDE2NEMzNC42MTU4IDExLjAxNjcgMzQuOTMyIDEyLjc5MDUgMzQuNjM1OCAxNC41MTQySDM0LjYzODNaTTEzLjU3NDEgMjEuNDQzMUwxMC4yMDY1IDE5LjQ5OTRDMTAuMTcwMiAxOS40ODE5IDEwLjE0NjUgMTkuNDQ2OCAxMC4xNDE1IDE5LjQwNjhWMTAuMTA3OUMxMC4xNDQgNS45Njc4MSAxMy41MDI4IDIuNjEyNzQgMTcuNjQyOSAyLjYxNTI0QzE5LjM5NDIgMi42MTUyNCAyMS4wODkyIDMuMjMwMjUgMjIuNDM1NSA0LjM1MDI4QzIyLjM3NDMgNC4zODI3OCAyMi4yNjkzIDQuNDQxNTMgMjIuMTk5MiA0LjQ4NDAzTDE0LjIzNDEgOS4wODQxM0MxMy44MjY2IDkuMzE1MzggMTMuNTc2NiA5Ljc0Nzg5IDEzLjU3OTEgMTAuMjE2N0wxMy41NzQxIDIxLjQ0MDZWMjEuNDQzMVpNMTUuNDAyOSAxNy41MDA2TDE5LjczNDIgMTQuOTk5M0wyNC4wNjU1IDE3LjQ5OTNWMjIuNTAwN0wxOS43MzQyIDI1LjAwMDdMMTUuNDAyOSAyMi41MDA3VjE3LjUwMDZaIiBmaWxsPSIjN0Q3RDg3Ii8+Cjwvc3ZnPgo="},"displayName":"Embeddings OpenAI","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1179,"icon":"fa:code","name":"@n8n/n8n-nodes-langchain.outputParserStructured","codex":{"data":{"alias":["json","zod"],"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.outputparserstructured/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Output Parsers"]}}},"group":"[\"transform\"]","defaults":{"name":"Structured Output Parser"},"iconData":{"icon":"code","type":"icon"},"displayName":"Structured Output Parser","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1268,"icon":"file:httprequest.svg","name":"@n8n/n8n-nodes-langchain.toolHttpRequest","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolhttprequest/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Tools"],"Tools":["Recommended Tools"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iIzAwMDRGNSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNNDAgMjBDNDAgOC45NTMgMzEuMDQ3IDAgMjAgMFMwIDguOTUzIDAgMjBzOC45NTMgMjAgMjAgMjAgMjAtOC45NTMgMjAtMjBNMjAgMzYuOTQ2Yy0xLjExNSAwLTIuODYyLS45NzktNC41LTQuMjQ3LS43MDQtMS40MDctMS4zMDQtMy4xNTYtMS43NDctNS4wMTRIMjYuMTljLS4zODYgMS44NTUtLjk4NiAzLjYwNS0xLjY5IDUuMDE0LTEuNjM4IDMuMjY4LTMuMzg1IDQuMjQ3LTQuNSA0LjI0N00xMi45MDYgMjBjMCAxLjYxLjEwMyAzLjE2NC4yOTQgNC42M2gxMy42YTM2IDM2IDAgMCAwIC4yOTQtNC42M2MwLTEuNjEtLjEwMy0zLjE2NC0uMjk0LTQuNjNIMTMuMmEzNiAzNiAwIDAgMC0uMjk0IDQuNjNNMjAgMy4wNTRjMS4xMTUgMCAyLjg2Mi45NzcgNC41IDQuMjQ2LjcwNyAxLjQxNCAxLjMwNyAzLjEwNyAxLjY5MiA1LjAxNUgxMy43NWMuNDQzLTEuOTEgMS4wNDQtMy42MDIgMS43NS01LjAxNCAxLjYzOC0zLjI3IDMuMzg1LTQuMjQ3IDQuNS00LjI0N00zMC4xNDggMjBjMC0xLjU5LS4wOTQtMy4xMzgtLjMyNS00LjYzaDYuNDgxYy40MjEgMS40NzIuNjQyIDMuMDI2LjY0MiA0LjYzcy0uMjIgMy4xNTgtLjY0MiA0LjYzaC02LjQ4MWMuMjMxLTEuNDkyLjMyNS0zLjA0LjMyNS00LjYzTTI2LjI3NyA0LjI1NWMxLjM2IDIuMTA1IDIuNDM0IDQuODc3IDMuMSA4LjA2aDUuNzI4YTE2Ljk4IDE2Ljk4IDAgMCAwLTguODI4LTguMDZtLTE1LjY1NCA4LjA2aC01LjczYzEuODU4LTMuNjQ3IDUtNi41MzIgOC44My04LjA2LTEuMzYgMi4xMDUtMi40MzQgNC44NzctMy4xIDguMDZNMy4wNTQgMjBjMCAxLjYwMy4yMjMgMy4xNTcuNjQgNC42M2g2LjQyOGE0MCA0MCAwIDAgMS0uMjctNC42M2MwLTEuNTk0LjA5NC0zLjE0Mi4yNy00LjYzSDMuNjk1YTE3IDE3IDAgMCAwLS42NCA0LjYzbTIzLjIyMyAxNS43NDNjMS4zNi0yLjEwNCAyLjQzNC00Ljg3NSAzLjEtOC4wNThoNS43MjhhMTYuOTYgMTYuOTYgMCAwIDEtOC44MjggOC4wNThtLTEyLjU1NCAwYTE3IDE3IDAgMCAxLTguODMtOC4wNThoNS43M2MuNjY2IDMuMTgzIDEuNzQgNS45NTQgMy4xIDguMDU4IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4="},"displayName":"HTTP Request Tool","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1281,"icon":"file:openrouter.svg","name":"@n8n/n8n-nodes-langchain.lmChatOpenRouter","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.lmchatopenrouter/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Language Models","Root Nodes"],"Language Models":["Chat Models (Recommended)"]}}},"group":"[\"transform\"]","defaults":{"name":"OpenRouter Chat Model"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjOTRBM0I4IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgdmlld0JveD0iMCAwIDI0IDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0aXRsZT5PcGVuUm91dGVyPC90aXRsZT48cGF0aCBkPSJNMTYuODA0IDEuOTU3bDcuMjIgNC4xMDV2LjA4N0wxNi43MyAxMC4yMWwuMDE3LTIuMTE3LS44MjEtLjAzYy0xLjA1OS0uMDI4LTEuNjExLjAwMi0yLjI2OC4xMS0xLjA2NC4xNzUtMi4wMzguNTc3LTMuMTQ3IDEuMzUyTDguMzQ1IDExLjAzYy0uMjg0LjE5NS0uNDk1LjMzNi0uNjguNDU1bC0uNTE1LjMyMi0uMzk3LjIzNC4zODUuMjMuNTMuMzM4Yy40NzYuMzE0IDEuMTcuNzk2IDIuNzAxIDEuODY2IDEuMTEuNzc1IDIuMDgzIDEuMTc3IDMuMTQ3IDEuMzUybC4zLjA0NWMuNjk0LjA5MSAxLjM3NS4wOTQgMi44MjUuMDMzbC4wMjItMi4xNTkgNy4yMiA0LjEwNXYuMDg3TDE2LjU4OSAyMmwuMDE0LTEuODYyLS42MzUuMDIyYy0xLjM4Ni4wNDItMi4xMzcuMDAyLTMuMTM4LS4xNjItMS42OTQtLjI4LTMuMjYtLjkyNi00Ljg4MS0yLjA1OWwtMi4xNTgtMS41YTIxLjk5NyAyMS45OTcgMCAwMC0uNzU1LS40OThsLS40NjctLjI4YTU1LjkyNyA1NS45MjcgMCAwMC0uNzYtLjQzQzIuOTA4IDE0LjczLjU2MyAxNC4xMTYgMCAxNC4xMTZWOS44ODhsLjE0LjAwNGMuNTY0LS4wMDcgMi45MS0uNjIyIDMuODA5LTEuMTI0bDEuMDE2LS41OC40MzgtLjI3NGMuNDI4LS4yOCAxLjA3Mi0uNzI2IDIuNjg2LTEuODUzIDEuNjIxLTEuMTMzIDMuMTg2LTEuNzggNC44ODEtMi4wNTkgMS4xNTItLjE5IDEuOTc0LS4yMTMgMy44MTQtLjEzOGwuMDItMS45MDd6Ij48L3BhdGg+PC9zdmc+Cg=="},"displayName":"OpenRouter Chat Model","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1289,"icon":"fa:brain","name":"@n8n/n8n-nodes-langchain.toolThink","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.toolthink/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Tools"],"Tools":["Other Tools"]}}},"group":"[\"transform\"]","defaults":{"name":"Think"},"iconData":{"icon":"brain","type":"icon"},"displayName":"Think Tool","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]},{"id":1308,"icon":"file:weaviate.svg","name":"@n8n/n8n-nodes-langchain.vectorStoreWeaviate","codex":{"data":{"resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/cluster-nodes/root-nodes/n8n-nodes-langchain.vectorstoreweaviate/"}]},"categories":["AI","Langchain"],"subcategories":{"AI":["Vector Stores","Tools","Root Nodes"],"Tools":["Other Tools"],"Vector Stores":["Other Vector Stores"]}}},"group":"[\"transform\"]","defaults":{"name":"Weaviate Vector Store"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB3aWR0aD0iMjU2cHgiIGhlaWdodD0iMjk2cHgiIHZpZXdCb3g9IjAgMCAyNTYgMjk2IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQiIHhtbG5zOmJ4PSJodHRwczovL2JveHktc3ZnLmNvbSI+PHRpdGxlPnFkcmFudDwvdGl0bGU+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQiIHgxPSIzOS44NCIgeTE9Ii0yMzg1LjI4IiB4Mj0iMzQuMDEiIHkyPSItMjQ0Mi40OCIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwIDI0MzMuOTIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNzViZTJjIi8+PHN0b3Agb2Zmc2V0PSIwLjg2IiBzdG9wLWNvbG9yPSIjOWRjMDNiIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhci1ncmFkaWVudC0yIiB4MT0iMzcuMDYiIHkxPSItMjQwOS4xMiIgeDI9IjM3LjA2IiB5Mj0iLTIzOTAuMzciIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAyNDMzLjkyKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzIzOGQzNyIvPjxzdG9wIG9mZnNldD0iMC45NCIgc3RvcC1jb2xvcj0iIzM1NTM3ZiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQtMyIgeDE9IjM1LjA3IiB5MT0iLTI0MTguODMiIHgyPSIzNy45OCIgeTI9Ii0yMzk5Ljc1IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAgMjQzMy45MikiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM2N2Q4NGQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMzNDg1MjIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibGluZWFyLWdyYWRpZW50LTQiIHgxPSI2NC4wMyIgeTE9Ii0yNDMzLjg3IiB4Mj0iNjQuMDMiIHkyPSItMjQwMC42MSIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwIDI0MzMuOTIpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZTRkMDBhIi8+PHN0b3Agb2Zmc2V0PSIwLjU2IiBzdG9wLWNvbG9yPSIjYzRkMTMyIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhci1ncmFkaWVudC01IiB4MT0iMTAuMDQiIHkxPSItMjQzMy44NyIgeDI9IjEwLjA0IiBocmVmPSIjbGluZWFyLWdyYWRpZW50LTQiLz48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhci1ncmFkaWVudC02IiB4MT0iNTYuNDMiIHkxPSItMjQwMC4yNSIgeDI9IjU2LjQzIiB5Mj0iLTIzODkuMTYiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAyNDMzLjkyKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzhhYjExYiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzZlYWYwMiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQtNyIgeDE9IjY0LjUxIiB5MT0iLTI0MTMuNjQiIHgyPSI2Mi4xOCIgeTI9Ii0yMzk0Ljk3IiBocmVmPSIjbGluZWFyLWdyYWRpZW50Ii8+PGxpbmVhckdyYWRpZW50IGlkPSJsaW5lYXItZ3JhZGllbnQtOCIgeDE9IjE3LjY0IiB5MT0iLTI0MDAuMjEiIHgyPSIxNy42NCIgeTI9Ii0yMzg5LjE3IiBocmVmPSIjbGluZWFyLWdyYWRpZW50LTYiLz48bGluZWFyR3JhZGllbnQgaWQ9ImxpbmVhci1ncmFkaWVudC05IiB4MT0iMTEuODIiIHkxPSItMjQxMy41NSIgeDI9IjkuNTMiIHkyPSItMjM5MS4xIiBocmVmPSIjbGluZWFyLWdyYWRpZW50Ii8+PGJ4OmV4cG9ydD48Yng6ZmlsZSBmb3JtYXQ9InN2ZyIgcGF0aD0icWRyYW50LnN2ZyIvPjwvYng6ZXhwb3J0PjwvZGVmcz48ZyB0cmFuc2Zvcm09Im1hdHJpeCgzLjMzMTkzOCwgMCwgMCwgMy4zMzE5MzgsIDMuNjY1OTg1LCA2MC4yMjM2NzUpIiBzdHlsZT0iIj48cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik03MS42Nyw3Ljk1TDU4Ljg1LjVjLTIuMTUtMS4yNS00Ljg1LjMxLTQuODUsMi43OXYxOC44NGwtOS4xLTUuMjRjLTQuODgtMi44MS0xMC44OC0yLjgtMTUuNzQuMDJsLTkuMDYsNS4yNFYzLjI4YzAtMi40OS0yLjY5LTQuMDQtNC44NS0yLjc5TDIuNCw3Ljk0Yy0xLjQ5Ljg2LTIuNCwyLjQ2LTIuNCw0LjE4djE3LjcxYzAsMS4yNC4zMSwyLjQyLjg4LDMuNDZoMGMuNTgsMS4wNywxLjQyLDEuOTgsMi40OCwyLjY2bDYuNjEsNC4yMiw1LjA2LDMuMjJjMy4wNCwxLjkzLDYuOTUsMS43OCw5LjgzLS4zOWwuMzgtLjNzLjA3LS4wNi4xMS0uMDhsNy42My01LjgyYzIuMjMtMS43MSw1Ljg4LTEuNzEsOC4xMiwwbDcuNjEsNS44cy4wMy4wMi4wNC4wM2wuNDcuMzdjMi44NywyLjE3LDYuNzksMi4zMiw5LjgzLjM5bDUuMDYtMy4yMyw2LjYzLTQuMjJjMS4wNC0uNjcsMS44OC0xLjU5LDIuNDYtMi42NHMuODktMi4yMy44OS0zLjQ3VjEyLjEzaDBjMC0xLjcyLS45MS0zLjMyLTIuNC00LjE4aC4wMVoiIHN0eWxlPSJmaWxsOiB1cmwoJnF1b3Q7I2xpbmVhci1ncmFkaWVudCZxdW90Oyk7IHN0cm9rZS13aWR0aDogMHB4OyIvPjxwYXRoIGNsYXNzPSJjbHMtMyIgZD0iTTU0LjEsMzMuNjJ2Ni4zNmMwLDEuOTYtMS40MSwzLjU2LTMuMTEsMy41Ni0uNjcsMC0xLjUxLS4zNC0yLjI5LS45M2wtNy42MS01LjhjLTIuMjMtMS43MS01Ljg4LTEuNzEtOC4xMiwwbC03LjYzLDUuODJjLS43Ni41Ny0xLjI1Ljc0LTEuOTcuNzQtMS43Ny4wMi0zLjM1LTEuMzEtMy4zNS0zLjM5di02LjM0bDEwLjktNy4wNGMzLjc0LTIuNDEsOC41Mi0yLjQxLDEyLjI1LDBsMTAuOTIsNi44OHYuMTNoMFoiIHN0eWxlPSJmaWxsOiB1cmwoJnF1b3Q7I2xpbmVhci1ncmFkaWVudC0yJnF1b3Q7KTsgc3Ryb2tlLXdpZHRoOiAwcHg7Ii8+PHBhdGggY2xhc3M9ImNscy00IiBkPSJNNTQsMjIuMTNsLjAzLDExLjU5LTEwLjg0LTYuOTNjLTMuNzMtMi4zOS04LjUxLTIuMzktMTIuMjUsMGwtMTAuODcsNi45NC4wMi0xMS41OCw5LjA3LTUuMjVjNC44Ni0yLjgyLDEwLjg2LTIuODIsMTUuNzQtLjAybDkuMSw1LjI0aDBaIiBzdHlsZT0iZmlsbDogdXJsKCZxdW90OyNsaW5lYXItZ3JhZGllbnQtMyZxdW90Oyk7IHN0cm9rZS13aWR0aDogMHB4OyIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTc0LjA3LDEyLjEzdjE3LjdjMCwxLjI1LS4zMSwyLjQyLS44OSwzLjQ3bC0xOS4xOS0xMS4xN1YzLjI4YzAtMi40OSwyLjctNC4wNCw0Ljg1LTIuNzlsMTIuODIsNy40NmMxLjQ5Ljg2LDIuNCwyLjQ2LDIuNCw0LjE4aDBaIiBzdHlsZT0iZmlsbDogdXJsKCZxdW90OyNsaW5lYXItZ3JhZGllbnQtNCZxdW90Oyk7IHN0cm9rZS13aWR0aDogMHB4OyIvPjxwYXRoIGNsYXNzPSJjbHMtOCIgZD0iTTIwLjA4LDMuMjh2MTguODdMLjg4LDMzLjMxQy4zMSwzMi4yNiwwLDMxLjA4LDAsMjkuODRWMTIuMTNDMCwxMC40MS45MSw4LjgxLDIuNCw3Ljk1TDE1LjIzLjQ5YzIuMTUtMS4yNSw0Ljg1LjMxLDQuODUsMi43OWgwWiIgc3R5bGU9ImZpbGw6IHVybCgmcXVvdDsjbGluZWFyLWdyYWRpZW50LTUmcXVvdDspOyBzdHJva2Utd2lkdGg6IDBweDsiLz48cGF0aCBjbGFzcz0iY2xzLTkiIGQ9Ik01MC43Miw0My4zMmMxLjcsMCwzLjMtMS4zNCwzLjMtMy4yOHYtNi4zNnMxMC4xMyw2LjQ3LDEwLjEzLDYuNDdsLTUuMTIsMy4yNmMtMy4wNCwxLjkzLTYuOTUsMS43OS05LjgzLS4zOWwtLjQ4LS4zOGMuNzIuNDksMS4zMy42OCwyLC42OGgwWiIgc3R5bGU9ImZpbGw6IHVybCgmcXVvdDsjbGluZWFyLWdyYWRpZW50LTYmcXVvdDspOyBzdHJva2Utd2lkdGg6IDBweDsiLz48cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik03My4xOCwzMy4zMWMtLjU4LDEuMDUtMS40MiwxLjk3LTIuNDYsMi42NGwtNi42Myw0LjIyLTEwLjA4LTYuNDUtLjAzLTExLjU5LDE5LjE5LDExLjE4aDBaIiBzdHlsZT0iZmlsbDogdXJsKCZxdW90OyNsaW5lYXItZ3JhZGllbnQtNyZxdW90Oyk7IHN0cm9rZS13aWR0aDogMHB4OyIvPjxwYXRoIGNsYXNzPSJjbHMtNSIgZD0iTTIwLjA4LDQwLjAzYzAsMS45NCwxLjYxLDMuNDcsMy4zLDMuMjguNzUtLjA5LDEuMzQtLjIsMS45NC0uNjZsLS40Ni4zNmMtMi44NywyLjE2LTYuNzksMi4zMi05LjgzLjM5bC01LjA2LTMuMjNoMHMxMC4xMS02LjQ2LDEwLjExLTYuNDZ2Ni4zMWgwWiIgc3R5bGU9ImZpbGw6IHVybCgmcXVvdDsjbGluZWFyLWdyYWRpZW50LTgmcXVvdDspOyBzdHJva2Utd2lkdGg6IDBweDsiLz48cGF0aCBjbGFzcz0iY2xzLTYiIGQ9Ik0yMC4wOCwyMi4xNXYxMS41N2wtMTAuMTEsNi40NWgwcy02LjYxLTQuMi02LjYxLTQuMmMtMS4wNS0uNjctMS45LTEuNTktMi40OC0yLjY2bDE5LjE5LTExLjE2aDBaIiBzdHlsZT0iZmlsbDogdXJsKCZxdW90OyNsaW5lYXItZ3JhZGllbnQtOSZxdW90Oyk7IHN0cm9rZS13aWR0aDogMHB4OyIvPjwvZz48L3N2Zz4="},"displayName":"Weaviate Vector Store","typeVersion":1,"nodeCategories":[{"id":25,"name":"AI"},{"id":26,"name":"Langchain"}]}],"categories":[{"id":32,"name":"Market Research"},{"id":48,"name":"AI RAG"}],"image":[]}}