Goal:
User query → Gemini → Apollo (Apify) → Database → API ready → Deploy

We’ll build a working beginner MVP.


---

🧠 What You’re Building (Simple Words)

Tum ek system banaoge jo:

1. User bolega:

> “Find CTOs in California SaaS companies”




2. System:

Gemini se filters banayega

Apify Apollo se leads nikalega

Database me store karega

Response dega





---

🔥 STEP 0 — Install Required Things

1️⃣ Install Python (Very Important)

Download from: https://python.org

Install → Tick "Add Python to PATH"

Check:

python --version


---

2️⃣ Install VS Code

Download: https://code.visualstudio.com


---

🔥 STEP 1 — Create Project

Open terminal:

mkdir leadgen
cd leadgen

Create virtual environment:

python -m venv venv

Activate:

Windows:

venv\Scripts\activate

Mac/Linux:

source venv/bin/activate


---

🔥 STEP 2 — Install Libraries

pip install fastapi uvicorn sqlalchemy psycopg2-binary google-generativeai requests python-dotenv


---

🔥 STEP 3 — Setup Database (Easiest Method)

We’ll use PostgreSQL.

Download: https://www.postgresql.org/download/

Install → remember password.

Create database:

Open pgAdmin OR terminal:

CREATE DATABASE leadsdb;


---

🔥 STEP 4 — Get API Keys

✅ 1. Gemini API Key

Go: https://makersuite.google.com/app/apikey

Generate API key.

✅ 2. Apify Token

Go: https://console.apify.com/account/integrations

Copy token.


---

🔥 STEP 5 — Create .env File

Inside project folder create:

.env

Put:

GEMINI_API_KEY=your_gemini_key
APIFY_TOKEN=your_apify_token
DATABASE_URL=postgresql://postgres:yourpassword@localhost/leadsdb


---

🔥 STEP 6 — Create main.py

Create file:

main.py

Paste FULL code below 👇


---

import os
import json
import requests
import google.generativeai as genai

from fastapi import FastAPI
from pydantic import BaseModel
from dotenv import load_dotenv

from sqlalchemy import create_engine, Column, String, Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# Load ENV
load_dotenv()

GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
APIFY_TOKEN = os.getenv("APIFY_TOKEN")
DATABASE_URL = os.getenv("DATABASE_URL")

# Configure Gemini
genai.configure(api_key=GEMINI_API_KEY)
model = genai.GenerativeModel("gemini-pro")

# Database Setup
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(bind=engine)
Base = declarative_base()

class Lead(Base):
    _tablename_ = "leads"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String)
    email = Column(String)
    title = Column(String)
    company = Column(String)
    location = Column(String)

Base.metadata.create_all(bind=engine)

# FastAPI
app = FastAPI()

class LeadQuery(BaseModel):
    query: str


# Step 1 - Convert query to filters
def convert_query_to_filters(query: str):
    prompt = f"""
    Convert this query into Apollo filters JSON.
    Return only JSON.

    Query: {query}

    Format:
    {{
        "personTitles": [],
        "organizationLocations": [],
        "organizationIndustries": []
    }}
    """

    response = model.generate_content(prompt)
    return json.loads(response.text)


# Step 2 - Fetch leads from Apify
def fetch_leads(filters):
    url = f"https://api.apify.com/v2/acts/apify~apollo-scraper/run-sync-get-dataset-items?token={APIFY_TOKEN}"

    response = requests.post(url, json=filters)
    return response.json()


# Step 3 - Store leads
def store_leads(leads):
    db = SessionLocal()

    for lead in leads:
        new_lead = Lead(
            name=lead.get("name"),
            email=lead.get("email"),
            title=lead.get("title"),
            company=lead.get("organization", {}).get("name"),
            location=lead.get("organization", {}).get("location")
        )
        db.add(new_lead)

    db.commit()
    db.close()


@app.post("/generate-leads")
def generate_leads(data: LeadQuery):
    filters = convert_query_to_filters(data.query)
    leads = fetch_leads(filters)
    store_leads(leads)

    return {
        "filters_used": filters,
        "leads_stored": len(leads)
    }


---

🔥 STEP 7 — Run Project

uvicorn main:app --reload

Open browser:

http://127.0.0.1:8000/docs

Click: POST /generate-leads

Try:

{
  "query": "Find CTOs in SaaS companies in California"
}


---

🎉 If Everything Works

Leads will:

Fetch from Apify

Store in PostgreSQL

Return count

Comments

Popular posts from this blog