Inspiration
Every founder I've seen pitch gets the same useless feedback — "great idea," "love the market," "let's stay in touch." Nobody tells them the truth. I wanted to build something that would actually say: your idea is weak, your runway is 8 months, and three well-funded competitors already own this market. The inspiration was simple — founders make some of the biggest decisions of their lives on gut feel and friendly opinions. I wanted to change that with real data.
What it does
StartupIQ AI takes a startup idea and runs it through a 9-node LangGraph multi-agent pipeline — each agent independently analyses a different dimension: market size, competitor landscape, investor fit, risk profile, SWOT, and future scenarios. A machine learning model trained on 13,334 real Crunchbase company outcomes runs as one of those nodes and injects its funding probability score directly into the risk and investor agent prompts, so the AI's reasoning is grounded in historical data not just LLM intuition. If the danger score hits 7 or above, the graph automatically routes through a deep risk analysis node that generates a 30/60/90 day survival plan. Results are delivered across 10 interactive tabs with Plotly charts, a competitor network graph, a what-if simulator, and one-click PDF export.
How we built it
Built entirely in Python as a single-file Streamlit application. The agent pipeline uses LangGraph's StateGraph with a TypedDict shared state — every node reads what previous nodes wrote and adds its own output. The ML layer uses scikit-learn: a Random Forest (150 trees) and Logistic Regression ensemble trained on the real Crunchbase open dataset — 66,368 companies filtered to 13,334 with clear final outcomes. The model is disk-cached with joblib so it trains once and loads in under 2 seconds on every subsequent run. Gemini 1.5 Flash handles the LLM layer through structured JSON prompting with fallback handling on every agent. Visualisations use Plotly and NetworkX, PDF export uses fpdf2 with Unicode sanitization.
Challenges we ran into
The hardest problem was making AI and ML actually talk to each other — not just display side by side. Getting the ML model output into the LangGraph shared state and then into the downstream agent prompts required redesigning the graph architecture mid-build. The second big challenge was the LangGraph InvalidUpdateError — newer versions of LangGraph are strict about fields that get written by multiple nodes, which broke our retry tracking. We moved retry logging outside the state entirely to fix it. We also started with synthetic training data and had to replace the entire ML pipeline with real Crunchbase data after realising it was completely indefensible. PDF generation crashed on em-dashes and Unicode characters not supported by Helvetica — fixed with a recursive safe_text sanitizer. JSON export broke because pandas DataFrames inside the result dict aren't serializable — fixed with a recursive make_serializable converter.
Accomplishments that we're proud of
Getting the ML model to run as a LangGraph node and have its output genuinely influence two downstream AI agents through shared state — that's not a common pattern and it took real architectural thinking. Training on 13,334 real company outcomes and achieving 0.826 AUC on held-out test data, 0.808 ± 0.006 on 5-fold cross-validation. Building a conditional routing system where high-danger startups automatically get a completely different analysis path — 30/60/90 day survival planning — without any manual intervention. Shipping a complete working product with 10 functional tabs, battle mode, what-if simulator, PDF export, and dark mode UI — not a demo, a usable tool.
What we learned
The most important lesson was that AI and ML integration is an architectural decision, not a UI decision. Showing two outputs side by side is not integration — it's just two features. Real integration means the ML output changes what the AI says. We also learned that LangGraph is genuinely different from chaining API calls — typed shared state, conditional edges, and retry logic are things you only appreciate once you've tried to build without them. And practically: always use real data. The moment you know your training set is synthetic you know the whole model is indefensible. Replacing it costs time but it's the only honest choice.
What's next for StartUpIQ-AI
Three concrete things. First, RAG — embedding real startup news, funding announcements, and industry reports into a vector store so agents retrieve current context before answering instead of relying purely on Gemini's training data. Second, expanding the ML feature set — right now we have 6 features from Crunchbase. With founder background data, team size history, and time-between-rounds velocity, we could push AUC significantly higher. Third, a proper deployment on Streamlit Cloud with a live URL and user accounts so founders can save and track their analysis over time as their startup evolves.
Built With
- artificial-intelligence
- langgraph
- machine-learning
- python
- scikit-learn
- streamlit
Log in or sign up for Devpost to join the conversation.