Automotive & EV Research Agent

Superhighway guides

The automotive industry is mid-transition: a century-old ICE business reorganizing around batteries, charging networks, software, and a redrawn map of OEMs, suppliers, and policy. Decisions turn on EV penetration curves, battery chemistry economics, charging-standard wars (NACS vs. CCS), IRA domestic-content rules, and Section 301 tariff exposure. This guide builds a Python agent for automotive industry analysts, EV startup founders and investors, OEM strategy teams, automotive engineers and product managers, fleet operators weighing electrification, battery and charging infrastructure investors, and automotive policy researchers. It chains all four Superhighway endpoints — /research for the market structure, /search against authoritative automotive trade publications and the EV ecosystem, /scrape for a specific OEM investor page or spec comparison, and /news for production, recall, and charging updates — then uses an LLM to emit a structured automotive brief as JSON.

Overview

The agent takes a vehicle model, OEM, technology, or market segment — "Tesla Model Y competitive positioning 2024", "China EV market BYD CATL competitive landscape" — and produces a structured automotive and EV brief:

Who it's for: automotive industry analysts, EV startup founders and investors, OEM strategy teams, automotive engineers and product managers, fleet operators considering EV transition, battery and charging infrastructure investors, and automotive policy researchers.

How it works

Five endpoint calls feed one LLM synthesis:

  1. /research — deep synthesis of the market: structure, OEM landscape, technology maturity, competitive dynamics, and historical context.
  2. /search (trade publications) — production volumes, OEM strategy, dealer dynamics, sales data, recalls, and vehicle specs scoped to WardsAuto, Automotive News, Motor Trend, and Car and Driver.
  3. /search (EV ecosystem, time=year) — battery technology, charging infrastructure, range anxiety, adoption curves, IRA tax credit impact, EU standards, autonomous driving, and connected-vehicle tech.
  4. /scrape — one relevant URL, e.g. an OEM investor relations page, an EV range and spec comparison, a charging network coverage map, or a Ward's auto sales report.
  5. /news (time=month) — recent production disruptions, sales data, EV launches, recalls, charging expansions, OEM partnerships, and battery supply chain updates.

Full example

pip install openai requests python-dotenv

Create a .env file with your two keys:

SUPERHIGHWAY_API_KEY=your_key_here
OPENAI_API_KEY=your_key_here
import requests, os, json
from openai import OpenAI

SUPERHIGHWAY_KEY = os.getenv("SUPERHIGHWAY_API_KEY")
BASE = "https://superhighway.walls.sh"
HEADERS = {"Authorization": f"Bearer {SUPERHIGHWAY_KEY}"}

llm = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))

# 1. Deep synthesis of the automotive market structure
def research_market(query: str) -> str:
    """OEM landscape, technology maturity, competitive dynamics, history."""
    r = requests.get(
        f"{BASE}/research",
        params={"q": f"{query} automotive electric vehicle market technology"},
        headers=HEADERS,
    )
    data = r.json()
    return data.get("summary", "")[:3000]

# 2. Authoritative automotive trade publications
def search_trade(query: str) -> list[dict]:
    """Production volumes, OEM strategy, dealer dynamics, sales, recalls, specs."""
    r = requests.get(
        f"{BASE}/search",
        params={
            "q": f"{query} site:motortrend.com OR site:caranddriver.com "
                 f"OR site:wardsauto.com OR site:automotive.com "
                 f"automotive sales production OEM",
        },
        headers=HEADERS,
    )
    return r.json().get("results", [])

# 3. EV ecosystem: battery, charging, adoption (last year)
def search_ev(query: str) -> list[dict]:
    """Battery tech, charging infrastructure, adoption curves, policy impact."""
    r = requests.get(
        f"{BASE}/search",
        params={
            "q": f"{query} electric vehicle EV battery charging infrastructure "
                 f"adoption market share",
            "time": "year",
        },
        headers=HEADERS,
    )
    return r.json().get("results", [])

# 4. Scrape one relevant OEM IR page / spec comparison / charging map / sales report
def scrape_page(url: str) -> dict:
    """Pull an OEM investor page, EV spec comparison, charging map, or sales report."""
    r = requests.post(
        f"{BASE}/scrape",
        json={"url": url, "mode": "markdown"},
        headers=HEADERS,
    )
    data = r.json()
    return {
        "url": url,
        "title": data.get("title", ""),
        "content": data.get("markdown", data.get("text", ""))[:2500],
    }

# 5. Recent automotive news: production, recalls, EV launches (last month)
def get_news(query: str) -> list[dict]:
    """Production, sales, EV launches, recalls, charging, battery supply chain."""
    r = requests.get(
        f"{BASE}/news",
        params={
            "q": f"{query} automotive recall production sales EV charging battery",
            "time": "month",
        },
        headers=HEADERS,
    )
    return r.json().get("results", [])

def generate_brief(
    query: str,
    market: str,
    trade: list[dict],
    ev: list[dict],
    scraped: dict | None,
    news: list[dict],
) -> dict | None:
    """Generate a structured automotive & EV brief as JSON."""

    trade_text = "\n".join(
        f"- {r.get('title', '')}: {r.get('snippet', '')} ({r.get('url', '')})"
        for r in trade[:6]
    )
    ev_text = "\n".join(
        f"- {r.get('title', '')}: {r.get('snippet', '')}"
        for r in ev[:6]
    )
    news_text = "\n".join(
        f"- {n.get('title', '')}: {n.get('snippet', '')}"
        for n in news[:6]
    )
    scraped_text = ""
    if scraped and scraped.get("content"):
        scraped_text = f"{scraped['title']}\n{scraped['content']}"

    response = llm.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {
                "role": "system",
                "content": (
                    "You are an automotive and EV market analyst. Use ONLY the "
                    "provided sources. Do not invent sales volumes, EV penetration "
                    "rates, range figures, or battery specs — if a detail is not in "
                    "the sources, say 'not found in sources.' Be precise about "
                    "powertrain type, market share, and policy status, and flag when "
                    "figures may be estimates or sector averages."
                ),
            },
            {
                "role": "user",
                "content": f"""Write an automotive & EV brief for: {query}

Market Structure (synthesis):
{market}

Automotive Trade Publications (WardsAuto / Automotive News / Motor Trend / Car and Driver):
{trade_text}

EV Ecosystem (battery / charging / adoption):
{ev_text}

Scraped OEM Page / Spec Comparison / Charging Map / Sales Report:
{scraped_text}

Recent Automotive News:
{news_text}

Return JSON with ALL of these fields:
- subject: vehicle model, OEM, technology, or market segment being researched
- powertrain_type: "BEV" | "PHEV" | "FCEV" | "mild-hybrid" | "ICE" | "mixed"
- vehicle_segment: "passenger-car" | "SUV-crossover" | "pickup-truck" | "commercial-van" | "heavy-truck" | "two-wheeler" | "mixed"
- oem_landscape: key manufacturers and their market position — e.g., Tesla Model Y market share in BEV SUV; legacy OEM EV ramp vs. Tesla; BYD/SAIC for China market; Stellantis/VW/GM strategy
- ev_adoption_metrics: EV penetration rate by market (US/EU/China), YoY growth, leading EV markets by region, fleet electrification timelines, consumer adoption barriers (range, cost, charging)
- technology_landscape: battery chemistry (LFP vs. NMC), pack energy density trends, solid-state timeline, charging speeds (NACS/CCS/CHAdeMO standards), OTA software update capability, autonomous driving (SAE Levels, ADAS features), V2X / Vehicle-to-Grid
- regulatory_and_policy: EPA CAFE standards, IRA EV tax credit eligibility and domestic content requirements, EU ELV regulations and CO2 fleet targets, ZEV mandates (California/EU), China NEV credits, tariff exposure (Section 301 tariffs on Chinese EVs)
- supply_chain_and_battery: critical mineral dependencies (lithium, cobalt, nickel, manganese), cell sourcing (CATL/LG/Panasonic/Samsung), gigafactory locations and capacity, nearshoring/IRA domestic content pressure, recycling ecosystem
- dealer_and_distribution: dealer network dynamics, direct-to-consumer vs. franchise dealer model tension (Tesla vs. legacy OEMs), fleet sales vs. retail, auction/wholesale market data
- financial_signals: OEM revenue/margin trends, EV profitability inflection timeline, VC/PE in EV startups (charging, battery, software), SPAC legacy concerns, comparable EV pure-play multiples
- data_quality: "high" | "medium" | "low" — based on coverage from automotive trade publications and public market data""",
            },
        ],
        response_format={"type": "json_object"},
    )

    try:
        return json.loads(response.choices[0].message.content)
    except (json.JSONDecodeError, KeyError):
        return None

def research_automotive(query: str) -> dict | None:
    """Run the full automotive & EV research pipeline."""
    print(f"Researching automotive: {query}")

    print("Synthesizing market structure...")
    market = research_market(query)

    print("Searching automotive trade publications...")
    trade = search_trade(query)

    print("Searching EV ecosystem...")
    ev = search_ev(query)

    print("Scraping a relevant OEM page / spec comparison / sales report...")
    scraped = None
    for result in trade + ev:
        url = result.get("url")
        if url:
            scraped = scrape_page(url)
            if scraped.get("content"):
                break

    print("Pulling recent automotive news...")
    news = get_news(query)

    print("Generating automotive brief...")
    return generate_brief(query, market, trade, ev, scraped, news)

def print_brief(brief: dict):
    if not brief:
        print("Could not generate brief.")
        return
    print(f"\n{'='*60}")
    print(f"Automotive & EV Brief")
    print(f"{'='*60}")
    print(f"\nSubject: {brief.get('subject', '')}")
    print(f"Powertrain Type: {brief.get('powertrain_type', '')}")
    print(f"Vehicle Segment: {brief.get('vehicle_segment', '')}")
    print(f"\nOEM Landscape:\n{brief.get('oem_landscape', '')}")
    print(f"\nEV Adoption Metrics:\n{brief.get('ev_adoption_metrics', '')}")
    print(f"\nTechnology Landscape:\n{brief.get('technology_landscape', '')}")
    print(f"\nRegulatory & Policy:\n{brief.get('regulatory_and_policy', '')}")
    print(f"\nSupply Chain & Battery:\n{brief.get('supply_chain_and_battery', '')}")
    print(f"\nDealer & Distribution:\n{brief.get('dealer_and_distribution', '')}")
    print(f"\nFinancial Signals:\n{brief.get('financial_signals', '')}")
    print(f"\nData Quality: {brief.get('data_quality', '?')}")

if __name__ == "__main__":
    import sys
    query = sys.argv[1] if len(sys.argv) > 1 else "Tesla Model Y competitive positioning 2024"
    brief = research_automotive(query)
    print_brief(brief)

Usage examples

Automotive market data and EV adoption metrics evolve rapidly with regulatory changes and production ramp-ups. Verify sales volumes, EV penetration rates, and policy details directly with industry sources (WardsAuto, S&P Global Mobility, BloombergNEF, IEA EV Outlook) for the most current figures.

Getting your API key

Grab a free Superhighway key at /pricing (1,000 calls/month, no credit card). For an agent that provisions its own access, skip the key entirely with x402: it pays $0.002 per call in USDC on Base — no signup, no key management. See the x402 pay-per-call guide for the wallet setup.

See also

The supply chain research agent applies the same four-endpoint pattern to suppliers and logistics risk across the automotive value chain, and the manufacturing research agent covers production technology and automation in the adjacent factory floor.