Discover/Modash API
live

Modash APImodash.io

Search and analyze Instagram, TikTok, and YouTube influencers. Filter by location, followers, engagement, and more. Access full profile reports and audience data.

Endpoints
7
Updated
2mo ago

What is the Modash API?

This API exposes 7 endpoints for discovering and profiling influencers across Instagram, TikTok, and YouTube. You can filter search results by follower count, location, verification status, and email availability, then pull full creator reports — including audience demographics, profile stats, and contact details — using get_instagram_influencer_report. An AI-powered natural language endpoint (ai_search_influencers) lets you query creators using plain text descriptions.

Try it
Number of results to return
Pagination cursor from previous response
Modash API key
Comma-separated location codes (e.g., 'US,GB')
Filter for accounts with email contact
Filter for verified accounts only
Maximum follower count
Minimum follower count
Minimum engagement rate
Comma-separated audience location codes
Minimum audience percentage in specified locations
api.parse.bot/scraper/3ef2b839-94b0-460c-aebe-37e4f435e153/<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 POST 'https://api.parse.bot/scraper/3ef2b839-94b0-460c-aebe-37e4f435e153/search_instagram_influencers' \
  -H 'X-API-Key: $PARSE_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
  "location": "US"
}'
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 modash-io-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.

"""
Modash Influencer Discovery API Client

This module provides a client for searching and analyzing influencer data
across Instagram, TikTok, and YouTube using the Parse API.

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

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


class ParseClient:
    """Client for interacting with the Modash Influencer Discovery API."""

    def __init__(self, api_key: Optional[str] = None):
        """
        Initialize the Parse API client.

        Args:
            api_key: Modash API key (defaults to PARSE_API_KEY env var)
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "3ef2b839-94b0-460c-aebe-37e4f435e153"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")

        if not self.api_key:
            raise ValueError("API key not provided and PARSE_API_KEY env var not set")

    def _call(
        self, endpoint: str, method: str = "POST", **params
    ) -> Dict[str, Any]:
        """
        Make an API call to the Parse bot.

        Args:
            endpoint: The endpoint name
            method: HTTP method (GET or POST)
            **params: Query/body parameters

        Returns:
            Response JSON as dictionary
        """
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {"X-API-Key": self.api_key, "Content-Type": "application/json"}

        if method == "GET":
            response = requests.get(url, headers=headers, params=params)
        elif method == "POST":
            response = requests.post(url, headers=headers, json=params)
        else:
            raise ValueError(f"Unsupported HTTP method: {method}")

        response.raise_for_status()
        return response.json()

    def search_instagram_influencers(
        self,
        followers_min: Optional[int] = None,
        followers_max: Optional[int] = None,
        engagement_min: Optional[float] = None,
        location: Optional[str] = None,
        audience_location: Optional[str] = None,
        audience_location_weight: Optional[float] = None,
        is_verified: Optional[bool] = None,
        has_email: Optional[bool] = None,
        limit: int = 15,
        cursor: Optional[str] = None,
    ) -> Dict[str, Any]:
        """
        Search for Instagram influencers with various filters.

        Args:
            followers_min: Minimum follower count
            followers_max: Maximum follower count
            engagement_min: Minimum engagement rate (e.g., 0.02 for 2%)
            location: Comma-separated ISO country codes
            audience_location: Comma-separated ISO country codes for audience location
            audience_location_weight: Minimum percentage of audience from location (0-1)
            is_verified: Filter for verified accounts
            has_email: Filter for influencers with public email
            limit: Number of results per page (max 15)
            cursor: Pagination cursor for next page

        Returns:
            Dictionary with lookalikes, total count, and cursor
        """
        params = {
            "api_key": self.api_key,
            "limit": limit,
        }

        if followers_min is not None:
            params["followers_min"] = followers_min
        if followers_max is not None:
            params["followers_max"] = followers_max
        if engagement_min is not None:
            params["engagement_min"] = engagement_min
        if location is not None:
            params["location"] = location
        if audience_location is not None:
            params["audience_location"] = audience_location
        if audience_location_weight is not None:
            params["audience_location_weight"] = audience_location_weight
        if is_verified is not None:
            params["is_verified"] = is_verified
        if has_email is not None:
            params["has_email"] = has_email
        if cursor is not None:
            params["cursor"] = cursor

        return self._call("search_instagram_influencers", method="POST", **params)

    def get_instagram_influencer_report(self, user_id: str) -> Dict[str, Any]:
        """
        Retrieve a detailed report for an Instagram influencer.

        Args:
            user_id: The Instagram user ID (numeric string)

        Returns:
            Dictionary with influencer details including contact info and demographics
        """
        return self._call(
            "get_instagram_influencer_report",
            method="GET",
            user_id=user_id,
            api_key=self.api_key,
        )

    def search_tiktok_influencers(
        self,
        followers_min: Optional[int] = None,
        location: Optional[str] = None,
        limit: int = 15,
        cursor: Optional[str] = None,
    ) -> Dict[str, Any]:
        """
        Search for TikTok influencers with filters.

        Args:
            followers_min: Minimum follower count
            location: Comma-separated ISO country codes
            limit: Number of results per page
            cursor: Pagination cursor for next page

        Returns:
            Dictionary with TikTok influencer results
        """
        params = {"api_key": self.api_key, "limit": limit}

        if followers_min is not None:
            params["followers_min"] = followers_min
        if location is not None:
            params["location"] = location
        if cursor is not None:
            params["cursor"] = cursor

        return self._call("search_tiktok_influencers", method="POST", **params)

    def search_youtube_influencers(
        self,
        location: Optional[str] = None,
        limit: int = 15,
        cursor: Optional[str] = None,
    ) -> Dict[str, Any]:
        """
        Search for YouTube influencers with filters.

        Args:
            location: Comma-separated ISO country codes
            limit: Number of results per page
            cursor: Pagination cursor for next page

        Returns:
            Dictionary with YouTube influencer results
        """
        params = {"api_key": self.api_key, "limit": limit}

        if location is not None:
            params["location"] = location
        if cursor is not None:
            params["cursor"] = cursor

        return self._call("search_youtube_influencers", method="POST", **params)

    def search_metadata(
        self,
        metadata_type: str = "locations",
        platform: str = "instagram",
        query: Optional[str] = None,
    ) -> Dict[str, Any]:
        """
        Search for metadata like locations, topics, languages, brands, etc.

        Args:
            metadata_type: Type of metadata (locations, topics, languages, brands, interests, users, hashtags)
            platform: Social platform (instagram, tiktok, youtube)
            query: Search keyword (e.g., 'New York' for locations)

        Returns:
            Dictionary with metadata results
        """
        params = {
            "api_key": self.api_key,
            "metadata_type": metadata_type,
            "platform": platform,
        }

        if query is not None:
            params["query"] = query

        return self._call("search_metadata", method="GET", **params)

    def search_influencers_by_email(self, email: str) -> Dict[str, Any]:
        """
        Lookup influencer accounts associated with an email address.

        Args:
            email: Email address to look up

        Returns:
            Dictionary with influencer results across platforms
        """
        return self._call(
            "search_influencers_by_email",
            method="POST",
            api_key=self.api_key,
            email=email,
        )

    def ai_search_influencers(
        self, query: str, platform: str = "instagram"
    ) -> Dict[str, Any]:
        """
        AI-powered natural language search for influencers.

        Args:
            query: Natural language query (e.g., 'fitness influencers interested in yoga')
            platform: Social platform (instagram, tiktok, youtube)

        Returns:
            Dictionary with AI-matched influencer results
        """
        return self._call(
            "ai_search_influencers",
            method="POST",
            api_key=self.api_key,
            query=query,
            platform=platform,
        )


def main():
    """
    Practical workflow: Search for high-engagement Instagram influencers,
    retrieve detailed reports with contact info, and compile a list of top prospects.
    """
    # Initialize client
    client = ParseClient()

    print("=" * 80)
    print("MODASH INFLUENCER DISCOVERY - CAMPAIGN PROSPECT RESEARCH")
    print("=" * 80)

    # Step 1: Use AI search for natural language discovery
    print("\n[Step 1] Using AI to search for relevant influencers...")
    print("Query: 'sustainable fashion influencers with engaged audience'\n")

    ai_results = client.ai_search_influencers(
        query="sustainable fashion influencers with engaged audience",
        platform="instagram",
    )

    total_ai_found = ai_results.get("total", 0)
    ai_influencers = ai_results.get("lookalikes", [])[:3]  # Get first 3

    print(f"AI Search found {total_ai_found} potential matches")
    print(f"Showing top {len(ai_influencers)} results from AI search:")
    print("-" * 80)

    ai_user_ids = []
    for idx, influencer in enumerate(ai_influencers, 1):
        print(
            f"\n{idx}. @{influencer.get('username')} - {influencer.get('followers', 0):,} followers"
        )
        print(f"   User ID: {influencer.get('userId')}")
        ai_user_ids.append(influencer.get("userId"))

    # Step 2: Search with specific filters for additional prospects
    print("\n" + "=" * 80)
    print("[Step 2] Searching Instagram with specific filters...")
    print("Criteria: 10k-100k followers, 3%+ engagement, Verified accounts\n")

    search_results = client.search_instagram_influencers(
        followers_min=10000,
        followers_max=100000,
        engagement_min=0.03,
        is_verified=True,
        has_email=True,
        limit=5,
    )

    total_found = search_results.get("total", 0)
    influencers = search_results.get("lookalikes", [])

    print(f"Found {total_found} total influencers matching criteria")
    print(f"Retrieved {len(influencers)} influencers in this batch:")
    print("-" * 80)

    prospects = []

    # Step 3: Get detailed reports for all discovered influencers
    all_user_ids = ai_user_ids + [inf.get("userId") for inf in influencers]

    for user_id in all_user_ids:
        if not user_id:
            continue

        try:
            print(f"\nFetching detailed report for user {user_id}...")
            report = client.get_instagram_influencer_report(user_id)

            prospect = {
                "userId": user_id,
                "username": report.get("username", "N/A"),
                "fullname": report.get("profile", {}).get("fullname", "N/A"),
                "followers": report.get("profile", {}).get("followers", 0),
                "engagement": report.get("stats", {}).get("engagementRate", 0),
                "avg_likes": report.get("stats", {}).get("avgLikes", 0),
                "audience_countries": report.get("audience", {}).get("countries", [])[:3],
                "contact_email": report.get("contact", {}).get("email", "Not available"),
                "biography": report.get("profile", {}).get("biography", ""),
            }

            prospects.append(prospect)

            print(f"  ✓ Username: @{prospect['username']}")
            print(f"  ✓ Followers: {prospect['followers']:,}")
            print(f"  ✓ Avg Likes per Post: {prospect['avg_likes']}")
            print(f"  ✓ Contact: {prospect['contact_email']}")

        except requests.exceptions.RequestException as e:
            print(f"  ✗ Error fetching report: {str(e)}")
        except Exception as e:
            print(f"  ✗ Unexpected error: {str(e)}")

    # Step 4: Display final summary and recommendations
    print("\n" + "=" * 80)
    print("PROSPECT SUMMARY & RECOMMENDATIONS")
    print("=" * 80)

    if prospects:
        print(f"\nTotal prospects identified: {len(prospects)}")
        print("\nTop prospects by engagement (sorted by avg likes):")
        print("-" * 80)

        sorted_prospects = sorted(prospects, key=lambda x: x["avg_likes"], reverse=True)

        for idx, prospect in enumerate(sorted_prospects[:5], 1):
            print(
                f"\n{idx}. {prospect['fullname']} (@{prospect['username']})"
            )
            print(f"   Followers: {prospect['followers']:,}")
            print(f"   Avg Likes: {prospect['avg_likes']}")
            print(f"   Engagement Rate: {prospect['engagement']:.2%}")
            print(f"   Email: {prospect['contact_email']}")

            if prospect["audience_countries"]:
                countries = ", ".join(prospect["audience_countries"])
                print(f"   Top Audience Countries: {countries}")

            if prospect["biography"]:
                bio_preview = prospect["biography"][:60] + (
                    "..." if len(prospect["biography"]) > 60 else ""
                )
                print(f"   Bio: {bio_preview}")

        print("\n" + "-" * 80)
        print("NEXT STEPS:")
        print("1. Review top prospects above")
        print("2. Check their recent posts for content alignment")
        print("3. Prepare outreach emails to prospects with contact info")
        print("4. Consider collaboration opportunities with highest engagement performers")

    else:
        print("\nNo detailed prospects retrieved. Please check your API key and try again.")

    print("\n" + "=" * 80)


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

Search for Instagram influencers with filters like location, followers, engagement, and contact info.

Input
ParamTypeDescription
limitintegerNumber of results to return
cursorstringPagination cursor from previous response
api_keyrequiredstringModash API key
locationstringComma-separated location codes (e.g., 'US,GB')
has_emailbooleanFilter for accounts with email contact
is_verifiedbooleanFilter for verified accounts only
followers_maxintegerMaximum follower count
followers_minintegerMinimum follower count
engagement_minnumberMinimum engagement rate
audience_locationstringComma-separated audience location codes
audience_location_weightnumberMinimum audience percentage in specified locations
Response
{
  "type": "object",
  "fields": {
    "total": "integer",
    "cursor": "string",
    "lookalikes": "array"
  },
  "sample": {
    "status": "error",
    "message": "Unauthorized: A valid API token is needed. Please visit the account [developer section](https://marketer.modash.io/developer). Please provide a valid API key via 'api_key' parameter."
  }
}

About the Modash API

Search Endpoints

Three platform-specific search endpoints — search_instagram_influencers, search_tiktok_influencers, and search_youtube_influencers — accept POST requests with filters like followers_min, followers_max, location (comma-separated country codes), has_email, and is_verified. Each returns a total count, a cursor string for paginating through result sets, and a lookalikes array containing matched creator profiles. The Instagram search supports the widest filter set, including boolean flags for verified accounts and email availability.

Creator Reports and Metadata

get_instagram_influencer_report accepts an Instagram user_id and returns three top-level objects: stats (engagement metrics and post-level data), profile (username, bio, and contact fields), and audience (demographic breakdowns including geography and age). The search_metadata endpoint lets you resolve valid filter values — locations, topics, languages, brands, interests, hashtags, and users — for a given platform, which is useful for constructing well-formed search requests.

Email and AI Search

search_influencers_by_email accepts an email address and returns any influencer accounts associated with that address across platforms, making it useful for reverse-lookup workflows. ai_search_influencers accepts a free-text query (e.g., "fitness influencers in New York") and an optional platform filter, returning a total and a lookalikes array. This endpoint lets you express multi-dimensional creator criteria without constructing explicit filter objects.

Pagination and API Key

All search endpoints support cursor-based pagination via a cursor parameter returned in each response. Every endpoint requires a Modash API key obtained from the Modash developer portal at https://marketer.modash.io/developer. The api_key parameter is passed directly in each request.

Reliability & maintenance

The Modash API is a managed, monitored endpoint for modash.io — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when modash.io 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 modash.io 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
  • Build an influencer discovery tool filtered by location and follower range using search_instagram_influencers
  • Pull audience demographic breakdowns for a list of Instagram creators using get_instagram_influencer_report
  • Reverse-lookup which social accounts belong to a known email address using search_influencers_by_email
  • Populate location or hashtag filter dropdowns in a campaign UI using search_metadata
  • Run natural language creator queries like 'travel vloggers in Australia' with ai_search_influencers
  • Paginate through large TikTok or YouTube creator result sets using cursor-based search endpoints
  • Identify verified Instagram accounts in specific markets for partnership outreach
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 Modash have an official developer API?+
Yes. Modash provides an official API accessible via the developer portal at https://marketer.modash.io/developer, where you can generate an API key.
What does `get_instagram_influencer_report` return, and is a similar report available for TikTok or YouTube creators?+
The Instagram report endpoint returns three objects: stats (engagement and post metrics), profile (bio and contact fields), and audience (demographic data). Currently, full creator report endpoints are only available for Instagram. You can fork this API on Parse and revise it to add a TikTok or YouTube report endpoint if Modash surfaces that data.
How do I get valid values for location or topic filters?+
Use the search_metadata endpoint with the appropriate metadata_type (e.g., 'locations', 'topics', 'hashtags') and a platform value. It returns a results array of valid filter values you can pass directly into the search endpoints.
Does the API expose historical performance data or post-level analytics over time?+
Not currently. The API returns current stats and audience data via the get_instagram_influencer_report endpoint, but does not expose time-series engagement history or individual post archives. You can fork this API on Parse and revise it to add historical trend tracking if that data becomes accessible through Modash.
Are there any known coverage limitations across platforms?+
The Instagram search endpoint has the most complete filter set, including has_email, is_verified, followers_min, and followers_max. The TikTok and YouTube search endpoints expose fewer filters — primarily location and followers_min — and full creator report endpoints are not available for those platforms in the current spec.
Page content last updated . Spec covers 7 endpoints from modash.io.
Related APIs in Social MediaSee all →
hypeauditor.com API
Find and analyze influencer profiles across Instagram and other platforms with detailed engagement metrics, contact information, and linked social accounts. Search by keyword or location, retrieve profile analytics, and identify top-performing creators to inform influencer marketing decisions.
library.tiktok.com API
Search TikTok's Commercial Content Library to discover ads by company name or keyword, then view detailed information like creative format, scheduling dates, audience targeting, and video thumbnails. Monitor competitor advertising strategies and track ad campaigns across supported regions.
toolify.ai API
Search and browse premium .ai domain names available on the Toolify marketplace, filtering by keywords, categories, prices, and domain attributes to find the perfect domain for your project. Explore curated domain listings organized by category to discover valuable .ai domains suited to your needs.
app.channelcrawler.com API
Search and discover YouTube channels across a database of 22M+ channels to find creators, communities, and content in your areas of interest. Get detailed channel information including stats and metadata to research creators and understand their audience.
threads.com API
Search for posts and users on Threads by keyword to discover content, view engagement metrics like likes and replies, and explore user profiles with their media. Find trending discussions and connect with creators all in one search experience.
patreon.com API
Search for Patreon creators and discover their membership tiers, pricing, patron counts, and detailed profile information. Find the creators you want to support or research with comprehensive details about their offerings and community size.
devpost.com API
Search and discover hackathons on Devpost by filtering based on status, keywords, and sorting options like prize money or submission deadlines. Find the perfect hackathon competition that matches your interests and timeline.
smashingmagazine.com API
Access Smashing Magazine's library of articles, books, ebooks, newsletters, and events with powerful search and filtering capabilities. Browse by category, discover related content, explore author profiles, and stay updated with the latest design and web development resources.