AI-powered data enrichment tool that transforms emails into rich datasets with company profiles, funding data, tech stacks, and more using Firecrawl and mult
AI-powered data enrichment tool that transforms emails into rich datasets with company profiles, funding data, tech stacks, and more using Firecrawl and mult
Turn a simple list of emails into a rich dataset with company profiles, funding data, tech stacks, and more. Powered by Firecrawl and a multi-agent AI system.
| Service | Purpose | Get Key |
|---|---|---|
| Firecrawl | Web scraping and content aggregation | firecrawl.dev/app/api-keys |
| OpenAI | Intelligent data extraction | platform.openai.com/api-keys |
.env.local file with your API keys:FIRECRAWL_API_KEY=your_firecrawl_key
OPENAI_API_KEY=your_openai_keynpm install or yarn installnpm run dev or yarn devBefore:
{
"email": "[email protected]"
}After:
{
"email": "[email protected]",
"companyName": "Wiz",
"industry": "Cybersecurity",
"employeeCount": "1001-5000",
"yearFounded": 2020,
"headquarters": "New York, NY",
"fundingStage": "Series D",
"totalRaised": "$900M",
"website": "https://www.wiz.io",
"sources": [
"https://www.wiz.io/about",
"https://techcrunch.com/2023/02/27/wiz-confirms-300m-at-a-10b-valuation-to-build-out-its-cloud-security-platform/"
]
}Let's see exactly how Fire Enrich processes a real example - enriching data for the email [email protected].
…Behind the scenes, each agent is a specialized module with its own expertise, search strategies, and type-safe output schema:
Discovery Agent (Phase 1)
DiscoveryResult with fields like companyName, website, domainCompany Profile Agent (Phase 2)
ProfileResult with industry, headquarters, yearFounded, companyTypeFinancial Intel Agent (Phase 3)
FundingResult with fundingStage, totalRaised, lastRoundAmount, investorsTech Stack Agent (Phase 4)
EnrichmentResult schema for flexible tech stack extractionGeneral Purpose Agent (Phase 5)
EnrichmentResult schema based on user-defined fieldsThe agents execute in a carefully designed sequence where each phase builds upon the previous one:
This architecture balances accuracy with performance - we could run all agents in parallel, but the sequential approach with shared context produces significantly better results.
Each agent uses Zod schemas to ensure type safety and make the system easily extensible:
// Example: Adding a new field to the FundingAgent
const FundingResult = z.object({
fundingStage: z.string().optional(),
totalRaised: z.string().optional(),
lastRoundAmount: z.string().optional(),
investors: z.array(z.string()).optional(),
// Add your new field here:
debtFinancing: z.string().optional(),
});To extend Fire Enrich with new data extraction capabilities:
/lib/agent-architecture/agents/[agent-name].tsAgentBase interfaceThe field routing system automatically categorizes user requests:
This design allows Fire Enrich to grow with your needs while maintaining type safety and predictable behavior.
Fire Enrich employs a sophisticated orchestration system that coordinates specialized extraction modules. These aren't autonomous AI agents, but rather purpose-built components that work together intelligently:
Each module uses GPT-4o for intelligent data extraction, but follows deterministic search patterns optimized through extensive testing. This hybrid approach combines the reliability of structured programming with the flexibility of AI-powered comprehension.
When you clone and run this repository locally, Fire Enrich automatically enables Unlimited Mode, removing the restrictions of the public demo. You can configure these limits in app/fire-enrich/config.ts:
const isUnlimitedMode = process.env.FIRE_ENRICH_UNLIMITED === 'true' ||
process.env.NODE_ENV === 'development';
export const FIRE_ENRICH_CONFIG = {
CSV_LIMITS: {
MAX_ROWS: isUnlimitedMode ? Infinity : 15,
MAX_COLUMNS: isUnlimitedMode ? Infinity : 5,
},
REQUEST_LIMITS: {
MAX_FIELDS_PER_ENRICHMENT: isUnlimitedMode ? 50 : 10,
},
} as const;Let's be blunt: professional data enrichment services are expensive for a reason. Our goal with Fire Enrich isn't to replicate every feature of mature platforms overnight. Instead, we want to build a powerful, open-source foundation that anyone can use, understand, and contribute to.
This is just the start. By open-sourcing it, we're inviting you to join us on this journey.
We believe that by building in public, we can create a tool that is more accessible, affordable, and adaptable, thanks to the collective intelligence of the open-source community.
MIT License - see LICENSE file for details.
We welcome contributions! Please feel free to submit a Pull Request.
For questions and issues, please open an issue in this repository.
No open issues yet, or sync has not completed.