Discover/DilutionTracker API
live

DilutionTracker APIdilutiontracker.com

Access DilutionTracker.com data via API: search ~3400 tickers, fetch pending S-1 offerings, reverse splits, popular tickers, and open-access dilution records.

Endpoints
5
Updated
2mo ago

What is the DilutionTracker API?

This API exposes 5 endpoints covering DilutionTracker's database of approximately 3,400 small- and mid-cap tickers tracked for dilution events. You can use search_tickers to find companies by symbol or name substring, pull trending tickers with market change data via get_popular_tickers, retrieve pending S-1 offerings, and fetch upcoming or completed reverse splits — all in structured JSON.

Try it
Maximum number of results to return.
Search query - ticker symbol or company name substring (case-insensitive). Matches against the dilution tracker coverage database which focuses on small/mid-cap stocks.
api.parse.bot/scraper/ec3cf538-1ae1-4340-b68a-f11c48041584/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/ec3cf538-1ae1-4340-b68a-f11c48041584/search_tickers?query=GameStop' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace dilutiontracker-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""
DilutionTracker API Client
Get your API key from: https://parse.bot/settings

A practical example showing how to use the DilutionTracker API to search
for stocks, analyze dilution events, and track market trends.
"""

import os
import requests
from typing import Any, Dict, Optional, List


class ParseClient:
    """Client for interacting with the DilutionTracker API via Parse."""
    
    def __init__(self, api_key: Optional[str] = None):
        """Initialize the ParseClient with API credentials."""
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "ec3cf538-1ae1-4340-b68a-f11c48041584"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")
        
        if not self.api_key:
            raise ValueError("API key must be provided or set in PARSE_API_KEY environment variable")
    
    def _call(self, endpoint: str, method: str = "POST", **params) -> Dict[str, Any]:
        """Make an API call to the Parse endpoint."""
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {
            "X-API-Key": self.api_key,
            "Content-Type": "application/json"
        }
        
        try:
            if method.upper() == "GET":
                response = requests.get(url, headers=headers, params=params, timeout=30)
            else:  # POST
                response = requests.post(url, headers=headers, json=params, timeout=30)
            
            response.raise_for_status()
            return response.json()
        except requests.exceptions.RequestException as e:
            print(f"API call failed: {e}")
            raise
    
    def search_tickers(self, query: str, limit: int = 20) -> List[Dict[str, Any]]:
        """
        Search for tickers by symbol or company name.
        
        Args:
            query: Search keyword (symbol or name)
            limit: Max results to return (default: 20)
        
        Returns:
            List of matching tickers with symbol, companyName, and coverageStatus
        """
        result = self._call("search_tickers", method="GET", query=query, limit=limit)
        if isinstance(result, dict) and "data" in result:
            return result.get("data", [])
        return result if isinstance(result, list) else []
    
    def get_popular_tickers(self) -> List[Dict[str, Any]]:
        """
        Fetch popular tickers currently trending on the platform.
        
        Returns:
            List of popular tickers with market data and performance
        """
        result = self._call("get_popular_tickers", method="GET")
        if isinstance(result, dict) and "data" in result:
            return result.get("data", [])
        return result if isinstance(result, list) else []
    
    def get_open_access_tickers(self) -> List[Dict[str, Any]]:
        """
        Fetch open access tickers available without a subscription.
        
        Returns:
            List of open access tickers with symbol, company name, and CIK
        """
        result = self._call("get_open_access_tickers", method="GET")
        if isinstance(result, dict) and "data" in result:
            return result.get("data", [])
        return result if isinstance(result, list) else []
    
    def get_pending_s1_offerings(self) -> List[Dict[str, Any]]:
        """
        Fetch pending S-1 offerings.
        
        Returns:
            List of companies with pending S-1 offerings
        """
        result = self._call("get_pending_s1_offerings", method="GET")
        if isinstance(result, dict) and "offerings" in result:
            return result.get("offerings", [])
        return result if isinstance(result, list) else []
    
    def get_reverse_splits(self) -> List[Dict[str, Any]]:
        """
        Fetch upcoming and completed reverse splits.
        
        Returns:
            List of reverse split events with symbol and effective date
        """
        result = self._call("get_reverse_splits", method="GET")
        if isinstance(result, dict) and "splits" in result:
            return result.get("splits", [])
        return result if isinstance(result, list) else []


def print_header(text: str) -> None:
    """Print a formatted section header."""
    print(f"\n{'=' * 80}")
    print(f"  {text}")
    print(f"{'=' * 80}")


def main():
    """Demonstrate practical usage of the DilutionTracker API."""
    
    # Initialize client
    try:
        client = ParseClient()
    except ValueError as e:
        print(f"Error: {e}")
        return
    
    # Step 1: Search for a specific ticker to understand coverage
    print_header("Step 1: Search for Specific Companies")
    
    search_queries = ["GameStop", "Tesla", "biotech"]
    all_search_results = {}
    
    for query in search_queries:
        print(f"\n🔍 Searching for '{query}'...")
        try:
            results = client.search_tickers(query, limit=5)
            all_search_results[query] = results
            
            if results:
                print(f"   Found {len(results)} matching ticker(s):")
                for ticker_info in results:
                    symbol = ticker_info.get("symbol", "N/A")
                    company = ticker_info.get("companyName", "N/A")
                    coverage = ticker_info.get("coverageStatus", "N/A")
                    print(f"   • {symbol:8} | {company:35} | Coverage: {coverage}")
            else:
                print(f"   No results found for '{query}'")
        except Exception as e:
            print(f"   Error searching: {e}")
    
    # Step 2: Get popular tickers and identify market trends
    print_header("Step 2: Analyze Popular Tickers and Market Trends")
    
    try:
        popular_tickers = client.get_popular_tickers()
        
        if popular_tickers:
            print(f"\n📈 Found {len(popular_tickers)} trending tickers")
            print("\nTop 10 by activity:")
            print(f"{'#':<3} {'Ticker':<8} {'Company':<35} {'Sector':<20} {'% Change':<10}")
            print("-" * 80)
            
            for i, ticker_info in enumerate(popular_tickers[:10], 1):
                ticker = ticker_info.get("ticker", "N/A")
                company = ticker_info.get("companyName", "N/A")[:32]
                sector = ticker_info.get("sector", "N/A")[:18]
                pct_change = ticker_info.get("pctChangeSinceLastCloseString", "N/A")
                print(f"{i:<3} {ticker:<8} {company:<35} {sector:<20} {pct_change:<10}")
            
            # Analyze sector distribution
            sectors = {}
            for ticker_info in popular_tickers:
                sector = ticker_info.get("sector", "Unknown")
                sectors[sector] = sectors.get(sector, 0) + 1
            
            print("\n📊 Sector Distribution:")
            for sector, count in sorted(sectors.items(), key=lambda x: x[1], reverse=True):
                print(f"   • {sector}: {count} tickers")
        else:
            print("No popular tickers available")
    except Exception as e:
        print(f"Error fetching popular tickers: {e}")
    
    # Step 3: Get open access tickers for free dilution analysis
    print_header("Step 3: Access Free Dilution Data (Open Access Tickers)")
    
    try:
        open_tickers = client.get_open_access_tickers()
        
        if open_tickers:
            print(f"\n🔓 Found {len(open_tickers)} open access tickers (free data)")
            
            # Build industry map
            industries = {}
            cik_map = {}  # Store for later cross-reference
            
            for ticker_info in open_tickers:
                symbol = ticker_info.get("symbol", "")
                industry = ticker_info.get("industry", "Unknown")
                cik = ticker_info.get("cik", "")
                
                industries[industry] = industries.get(industry, 0) + 1
                if symbol:
                    cik_map[symbol] = cik
            
            print("\n📋 Industry Distribution (top 15):")
            print(f"{'#':<3} {'Industry':<40} {'Count':<8}")
            print("-" * 55)
            
            for i, (industry, count) in enumerate(
                sorted(industries.items(), key=lambda x: x[1], reverse=True)[:15], 1
            ):
                print(f"{i:<3} {industry:<40} {count:<8}")
            
            # Show sample tickers
            print("\n📌 Sample Open Access Tickers (first 8):")
            print(f"{'Symbol':<10} {'Company':<40} {'Industry':<25}")
            print("-" * 80)
            
            for ticker_info in open_tickers[:8]:
                symbol = ticker_info.get("symbol", "N/A")
                company = ticker_info.get("companyName", "N/A")[:38]
                industry = ticker_info.get("industry", "N/A")[:23]
                print(f"{symbol:<10} {company:<40} {industry:<25}")
        else:
            print("No open access tickers available")
    except Exception as e:
        print(f"Error fetching open access tickers: {e}")
    
    # Step 4: Monitor dilution events - pending S-1 offerings
    print_header("Step 4: Monitor IPO Activity (Pending S-1 Offerings)")
    
    try:
        s1_offerings = client.get_pending_s1_offerings()
        
        if s1_offerings:
            print(f"\n🚀 Found {len(s1_offerings)} companies with pending S-1 offerings")
            print("\nSample S-1 Offerings (first 10):")
            
            for i, offering in enumerate(s1_offerings[:10], 1):
                symbol = offering.get("symbol", "N/A")
                company = offering.get("companyName", "N/A")
                print(f"   {i:2}. {symbol:8} | {company}")
        else:
            print("No pending S-1 offerings currently tracked")
    except Exception as e:
        print(f"Error fetching S-1 offerings: {e}")
    
    # Step 5: Track reverse splits (dilution risk indicator)
    print_header("Step 5: Track Reverse Splits (Dilution Risk Indicator)")
    
    try:
        reverse_splits = client.get_reverse_splits()
        
        if reverse_splits:
            print(f"\n📉 Found {len(reverse_splits)} reverse split events")
            print("\nRecent Reverse Splits (first 10):")
            
            for i, split in enumerate(reverse_splits[:10], 1):
                symbol = split.get("symbol", "N/A")
                date = split.get("effectiveDate", "N/A")
                ratio = split.get("ratio", "N/A")
                print(f"   {i:2}. {symbol:8} | Date: {date} | Ratio: {ratio}")
        else:
            print("No reverse split data available")
    except Exception as e:
        print(f"Error fetching reverse splits: {e}")
    
    # Step 6: Cross-analysis workflow
    print_header("Step 6: Dilution Risk Analysis - Cross-Reference Check")
    
    try:
        # Get all datasets
        open_access = client.get_open_access_tickers()
        s1_offerings = client.get_pending_s1_offerings()
        reverse_splits = client.get_reverse_splits()
        
        if open_access and (s1_offerings or reverse_splits):
            open_symbols = {t.get("symbol") for t in open_access if t.get("symbol")}
            s1_symbols = {o.get("symbol") for o in s1_offerings if o.get("symbol")}
            split_symbols = {s.get("symbol") for s in reverse_splits if s.get("symbol")}
            
            # Find overlaps
            s1_overlap = open_symbols.intersection(s1_symbols)
            split_overlap = open_symbols.intersection(split_symbols)
            
            print(f"\n📊 Analysis Results:")
            print(f"   Total open access tickers: {len(open_symbols)}")
            print(f"   Total pending S-1 offerings: {len(s1_symbols)}")
            print(f"   Total reverse split events: {len(split_symbols)}")
            
            if s1_overlap:
                print(f"\n⚠️  ALERT: {len(s1_overlap)} open access ticker(s) with pending S-1 offerings:")
                for symbol in sorted(s1_overlap)[:5]:
                    print(f"      • {symbol}")
            else:
                print(f"\n✅ No overlap between open access tickers and pending S-1 offerings")
            
            if split_overlap:
                print(f"\n⚠️  ALERT: {len(split_overlap)} open access ticker(s) with recent reverse splits:")
                for symbol in sorted(split_overlap)[:5]:
                    print(f"      • {symbol}")
            else:
                print(f"\n✅ No open access tickers with recent reverse splits")
            
            # Summary statistics
            print(f"\n📈 Coverage Summary:")
            print(f"   High-risk open access tickers: {len(s1_overlap.union(split_overlap))}")
            print(f"   Safe open access tickers: {len(open_symbols) - len(s1_overlap.union(split_overlap))}")
        else:
            print("Insufficient data for cross-reference analysis")
    except Exception as e:
        print(f"Error during cross-analysis: {e}")
    
    print_header("Analysis Complete")
    print("✅ DilutionTracker API workflow executed successfully!")


if __name__ == "__main__":
    main()
All endpoints · 5 totalmissing one? ·

Search for tickers by symbol or company name substring. Searches against the DilutionTracker coverage database (approximately 3400 small/mid-cap tickers focused on dilution events). Results are case-insensitive substring matches.

Input
ParamTypeDescription
limitintegerMaximum number of results to return.
queryrequiredstringSearch query - ticker symbol or company name substring (case-insensitive). Matches against the dilution tracker coverage database which focuses on small/mid-cap stocks.
Response
{
  "type": "object",
  "fields": {
    "data": "array of matching ticker objects with symbol, companyName, and coverageStatus",
    "status": "string indicating success"
  },
  "sample": {
    "data": [
      {
        "symbol": "GME",
        "companyName": "GameStop Corp.",
        "coverageStatus": "hasFiling"
      }
    ],
    "status": "success"
  }
}

About the DilutionTracker API

Ticker Search and Coverage

search_tickers accepts a required query string and an optional limit integer. It performs case-insensitive substring matching against roughly 3,400 tickers in DilutionTracker's coverage database, returning each match with symbol, companyName, and coverageStatus. This is useful for confirming whether a specific small-cap company is tracked before requesting deeper data.

Market Activity and Open Access

get_popular_tickers returns up to 30 currently trending tickers sorted by platform activity. Each object includes ticker, companyName, sector, industry, pctChangeSinceLastClose, and pctChangeSinceLastCloseSt — giving a snapshot of which names are drawing attention alongside their day-over-day price movement. get_open_access_tickers surfaces tickers whose full dilution data is available without a subscription; each record includes symbol, cik, companyName, industry, and openAccessDate.

Corporate Actions

get_pending_s1_offerings returns an array of pending S-1 registration filings, which are early signals of upcoming share issuances. get_reverse_splits returns both upcoming and completed reverse split events. These two endpoints are useful for monitoring corporate actions that directly affect share count and price.

Reliability & maintenance

The DilutionTracker API is a managed, monitored endpoint for dilutiontracker.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when dilutiontracker.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official dilutiontracker.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Screen small-cap stocks for upcoming dilution events using pending S-1 offering data.
  • Monitor reverse split history and upcoming splits to adjust position sizing or risk models.
  • Build a watchlist dashboard using popular ticker trend data with sector and daily percent change.
  • Validate ticker coverage before querying deeper dilution records with the search endpoint.
  • Identify tickers with free full-access dilution data using the open access tickers endpoint.
  • Track CIK numbers alongside ticker symbols for cross-referencing SEC EDGAR filings.
  • Alert on newly trending small-cap names by polling the popular tickers endpoint regularly.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does DilutionTracker have an official developer API?+
DilutionTracker does not publish a documented public developer API. The data here is exposed through Parse's API layer covering the DilutionTracker.com platform.
What does `get_open_access_tickers` return and how does it differ from `search_tickers`?+
get_open_access_tickers returns a fixed list of tickers whose full dilution detail is available without a paid subscription, including the openAccessDate and cik for each. search_tickers queries the broader ~3,400-ticker coverage database by symbol or name substring and returns coverageStatus — but does not filter by access tier or return the CIK.
Does the API return detailed dilution history or share structure breakdowns for individual tickers?+
Not currently. The API covers ticker search, popular tickers, open-access ticker listings, pending S-1 offerings, and reverse splits. Per-ticker dilution history, authorized shares, float data, or warrant details are not exposed. You can fork this API on Parse and revise it to add an endpoint targeting individual ticker dilution detail pages.
How fresh is the data from endpoints like `get_pending_s1_offerings` and `get_reverse_splits`?+
Both endpoints reflect the current state of DilutionTracker's platform at the time of the request. Neither endpoint includes a timestamp field in the response, so polling periodically is the practical way to detect new entries or status changes.
Can I filter popular tickers by sector or industry?+
The get_popular_tickers endpoint returns sector and industry fields in each result object, but takes no filter parameters — it always returns the full set of up to 30 trending tickers. Filtering by sector or industry would need to be done client-side. You can also fork this API on Parse and revise it to add server-side filtering if needed.
Page content last updated . Spec covers 5 endpoints from dilutiontracker.com.
Related APIs in FinanceSee all →
ticker.finology.in API
Search and analyze stocks, view company financials and market indices, track super investors and their holdings, and explore IPO listings and sector performance. Get comprehensive market data including company overviews, financial statements, and real-time dashboard information to make informed investment decisions.
stockanalysis.com API
Access comprehensive stock market data including real-time financials, income statements, statistics, and IPO calendars to research individual stocks and identify market movers. Search stocks, view detailed overviews, and monitor premarket activity all in structured, easy-to-use format.
sec.gov API
Search for publicly traded companies and instantly access their SEC filings with details like filing type, date, description, and accession numbers. Find the regulatory documents you need to research company financial information and compliance records.
polygon.io API
Access real-time and historical market data for stocks, cryptocurrencies, forex, and commodities—including price aggregates, ticker details, and financial statements—all from a single platform. Get the latest market news, check trading status across exchanges, and retrieve comprehensive ticker information to power your investment analysis and trading decisions.
marketbeat.com API
Track comprehensive stock market data including real-time overviews, analyst ratings, earnings reports, insider trades, and institutional ownership across thousands of companies. Search stocks, analyze financial statements and profitability metrics, monitor short interest, explore options chains, and stay updated with market headlines and competitor analysis.
statusinvest.com.br API
Search and analyze Brazilian stocks with real-time market data, including detailed financial indicators, historical price movements, and dividend information. Track stock performance and investment metrics all in one place.
openinsider.com API
Track insider trading activity by accessing the latest SEC filings, identifying cluster buys, and discovering top insider purchases with advanced filtering capabilities. Screen stocks based on insider behavior patterns and visualize buy/sell trends to inform your investment decisions.
screener.in API
Search and analyze Indian stocks with real-time financial data, company details, IPO information, price history, and peer comparisons. Get instant access to stock screening results, market listings, and company announcements to make informed investment decisions.