Discover/theKrew API
live

theKrew APIthekrew.ai

Access theKrew.ai website content via 6 endpoints. Retrieve blog posts, case studies, FAQs, and page metadata including JSON-LD, Open Graph, and full text.

This API takes change requests — .
Endpoints
6
Updated
2d ago

What is the theKrew API?

The theKrew.ai API exposes 6 endpoints covering the full content of thekrew.ai, including 118+ indexed pages, blog posts with category metadata, case studies, and structured FAQ sections. Use list_pages to retrieve every URL with last-modified dates and priority values, or get_blog_post to fetch a single article's full text, read time, author, and publication dates directly.

This call costs1 credit / call— charged only on success
Try it

No input parameters required.

api.parse.bot/scraper/7e946b30-46d5-44dd-a12b-a1ed3239b09d/<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/7e946b30-46d5-44dd-a12b-a1ed3239b09d/list_pages' \
  -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 thekrew-ai-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.

"""
theKrew.ai Website Content API Client
Get your API key from: https://parse.bot/settings
"""

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


class ParseClient:
    """Client for theKrew.ai Website Content API"""
    
    def __init__(self, api_key: Optional[str] = None):
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "7e946b30-46d5-44dd-a12b-a1ed3239b09d"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")
        
        if not self.api_key:
            raise ValueError("API key not provided. Set PARSE_API_KEY environment variable or pass it as argument.")
    
    def _call(self, endpoint: str, method: str = "POST", **params) -> Dict[str, Any]:
        """Make API call to Parse bot"""
        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 method: {method}")
        
        response.raise_for_status()
        return response.json()
    
    def list_pages(self) -> Dict[str, Any]:
        """List all pages on thekrew.ai from the sitemap.
        
        Returns:
            Dictionary with total page count and list of page objects containing
            url, path, last_modified, and priority fields.
        """
        return self._call("list_pages", method="GET")
    
    def get_page(self, path: str = "/") -> Dict[str, Any]:
        """Get the full content of a page by its path.
        
        Args:
            path: URL path of the page (e.g., '/pricing/', '/about/').
                  Defaults to homepage.
        
        Returns:
            Dictionary with page metadata (title, description, keywords, og_data,
            structured_data) and full text content.
        """
        return self._call("get_page", method="GET", path=path)
    
    def list_blog_posts(self, category: Optional[str] = None) -> Dict[str, Any]:
        """List all blog posts with metadata.
        
        Args:
            category: Optional filter by category (case-insensitive partial match).
                     Known categories: AI for Business, Growth Strategy, Founder Lessons,
                     Behind the Build, Business Growth, Team Efficiency.
        
        Returns:
            Dictionary with total post count and list of blog post objects containing
            slug, title, category, read_time, excerpt, date, and url.
        """
        params = {}
        if category:
            params["category"] = category
        return self._call("list_blog_posts", method="GET", **params)
    
    def get_blog_post(self, slug: str) -> Dict[str, Any]:
        """Get the full content of a blog post by its slug.
        
        Args:
            slug: Blog post slug from the URL (e.g., 'ai-content-marketing-drives-sales').
        
        Returns:
            Dictionary with blog post metadata (title, description, keywords, read_time,
            article_meta with author and dates) and full text content.
        """
        return self._call("get_blog_post", method="GET", slug=slug)
    
    def list_case_studies(self) -> Dict[str, Any]:
        """List all case studies with titles and subtitles.
        
        Returns:
            Dictionary with total case study count and list of case study objects
            containing slug, title, subtitle, and url.
        """
        return self._call("list_case_studies", method="GET")
    
    def get_faq(self) -> Dict[str, Any]:
        """Get all FAQ content organized by section.
        
        Returns:
            Dictionary with total sections and questions count, plus sections array
            where each section contains section name and questions with answers.
        """
        return self._call("get_faq", method="GET")


def main():
    """Practical workflow example: Research blog posts by category and compile insights"""
    
    # Initialize client
    client = ParseClient()
    
    print("=" * 70)
    print("theKrew.ai Content Analysis - Blog Posts by Category")
    print("=" * 70)
    
    # Step 1: Get all blog posts to understand available categories
    print("\n1. Fetching all blog posts...")
    all_posts_response = client.list_blog_posts()
    total_posts = all_posts_response.get("total", 0)
    all_posts = all_posts_response.get("posts", [])
    print(f"   Found {total_posts} total blog posts")
    
    # Step 2: Extract unique categories
    categories = set()
    for post in all_posts:
        if post.get("category"):
            categories.add(post["category"])
    
    print(f"   Categories found: {', '.join(sorted(categories))}")
    
    # Step 3: Filter and analyze posts from "AI for Business" category
    print("\n2. Analyzing 'AI for Business' category posts...")
    business_posts_response = client.list_blog_posts(category="AI for Business")
    business_posts = business_posts_response.get("posts", [])
    print(f"   Found {len(business_posts)} posts in this category")
    
    # Step 4: Get detailed content for first 2 posts and extract key insights
    print("\n3. Fetching detailed content for sample posts...")
    sample_insights = []
    
    for i, post in enumerate(business_posts[:2]):
        slug = post.get("slug")
        print(f"\n   Post {i+1}: {post.get('title')}")
        print(f"   Date: {post.get('date')} | Read time: {post.get('read_time')}")
        print(f"   Excerpt: {post.get('excerpt', 'N/A')[:100]}...")
        
        # Get full blog post content
        full_post = client.get_blog_post(slug=slug)
        
        # Extract author info
        article_meta = full_post.get("article_meta", {})
        author = article_meta.get("author", "Unknown")
        
        # Get first 150 chars of content for snippet
        content = full_post.get("content", "")
        content_snippet = content[:150].replace('\n', ' ') + "..." if len(content) > 150 else content
        
        insight = {
            "title": post.get("title"),
            "author": author,
            "date": article_meta.get("date_published"),
            "read_time": post.get("read_time"),
            "content_preview": content_snippet
        }
        sample_insights.append(insight)
    
    # Step 5: Get FAQ information for context about the platform
    print("\n4. Fetching FAQ sections...")
    faq_response = client.get_faq()
    total_sections = faq_response.get("total_sections", 0)
    total_questions = faq_response.get("total_questions", 0)
    print(f"   Found {total_sections} FAQ sections with {total_questions} total questions")
    
    # Display first question from each section for overview
    sections = faq_response.get("sections", [])
    for section in sections[:3]:
        section_name = section.get("section", "")
        questions = section.get("questions", [])
        if questions:
            first_q = questions[0].get("question", "")
            print(f"   • {section_name}: {first_q}")
    
    # Step 6: Get homepage content for overall platform understanding
    print("\n5. Fetching homepage content for platform overview...")
    homepage = client.get_page(path="/")
    homepage_title = homepage.get("title", "")
    homepage_desc = homepage.get("description", "")
    print(f"   Title: {homepage_title}")
    print(f"   Description: {homepage_desc[:120]}...")
    
    # Final summary
    print("\n" + "=" * 70)
    print("ANALYSIS SUMMARY")
    print("=" * 70)
    print(f"✓ Blog Posts Analyzed: {len(sample_insights)} detailed articles reviewed")
    print(f"✓ Categories Explored: {', '.join(sorted(categories))}")
    print(f"✓ FAQ Coverage: {total_questions} questions across {total_sections} sections")
    print(f"✓ Platform Pages: {total_posts + 85} total pages available")
    
    print("\nSample Blog Post Authors:")
    for insight in sample_insights:
        print(f"  • {insight['author']} - '{insight['title'][:50]}...'")
    
    print("\n" + "=" * 70)


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

List all pages on thekrew.ai from the sitemap. Returns URLs, paths, last modified dates, and priority values for all 118+ pages including blog posts, case studies, playbooks, and static pages.

Input

No input parameters required.

Response
{
  "type": "object",
  "fields": {
    "pages": "array of page objects with url, path, last_modified, priority",
    "total": "integer"
  },
  "sample": {
    "pages": [
      {
        "url": "https://thekrew.ai/",
        "path": "/",
        "priority": 1,
        "last_modified": "2026-06-08"
      },
      {
        "url": "https://thekrew.ai/blog/",
        "path": "/blog/",
        "priority": 0.8,
        "last_modified": "2026-06-08"
      }
    ],
    "total": 118
  }
}

About the theKrew API

Page and Blog Content

list_pages returns every URL on thekrew.ai sourced from the sitemap — each entry includes url, path, last_modified, and priority, with a total count of 118+ pages. get_page accepts any path (e.g. /pricing/, /about/, /how-it-works/) and returns title, content, description, keywords, og_data, and a structured_data array of JSON-LD objects. This makes it straightforward to pull Open Graph metadata or schema.org markup for any page on the site without traversing them individually.

Blog Posts and Case Studies

list_blog_posts returns post summaries including title, category, excerpt, read time, and date. An optional category parameter filters results by a case-insensitive partial match against known categories like AI for Business and Growth Strategy. get_blog_post takes a slug (e.g. ai-content-marketing-drives-sales) and returns the full article text alongside article_meta — a structured object with headline, date_published, date_modified, author, and author_url. list_case_studies returns titles, subtitles describing the business type and location, and URLs for all available case studies.

FAQ Data

get_faq returns all FAQ content grouped into named sections such as "Getting started", "How theKrew works", "Control and safety", "Pricing and billing", and "For tech-savvy users". Each section object contains a questions array, and the response also provides total_sections and total_questions counts for quick validation.

Reliability & maintenance

The theKrew API is a managed, monitored endpoint for thekrew.ai — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when thekrew.ai 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 thekrew.ai 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 a content aggregator that surfaces theKrew.ai blog posts filtered by category using list_blog_posts with the category parameter
  • Populate a knowledge base with FAQ content from get_faq, organized by the returned section names
  • Index all 118+ site pages for search by iterating list_pages results and fetching full text with get_page
  • Extract JSON-LD structured data from any page via the structured_data field returned by get_page
  • Display a case study directory by mapping titles and subtitles from list_case_studies
  • Track content freshness across the site using last_modified dates from list_pages
  • Pull article authorship and publication dates from article_meta in get_blog_post for citation or content audits
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 theKrew.ai have an official developer API?+
No. theKrew.ai does not publish an official developer API or public data feed. This Parse API is the available programmatic way to access the site's content.
What does `get_blog_post` return beyond the article text?+
get_blog_post returns title, description, keywords, read_time, the full content string, and an article_meta object containing headline, date_published, date_modified, author, and author_url. The slug parameter is required and must match a valid blog post slug.
Can I get the full text of case studies, not just their listing metadata?+
list_case_studies returns titles, subtitles, and URLs for all case studies, but does not return full case study body text directly. You can pass a case study path to get_page to retrieve its full content. If you need a dedicated get_case_study endpoint with structured fields, you can fork this API on Parse and revise it to add that endpoint.
Does `list_blog_posts` support pagination or a limit parameter?+
The endpoint returns all blog posts in a single response with a total count. Pagination and per-page limits are not currently supported. The API covers all posts available from the blog listing page combined with sitemap entries. You can fork it on Parse and revise to add offset or limit parameters.
How current is the page data returned by `list_pages`?+
Each page object includes a last_modified field sourced from the sitemap, so you can compare timestamps to detect stale entries. However, the API does not expose a separate refresh timestamp or guarantee a specific update cadence for the underlying data.
Page content last updated . Spec covers 6 endpoints from thekrew.ai.
Related APIs in B2b DirectorySee all →
crunchbase.com API
Search and retrieve detailed information about companies, investors, and key people to discover funding opportunities, track market competitors, and analyze investment trends. Access comprehensive profiles including organization details, investor backgrounds, and complete funding round histories all in one place.
dnb.com API
Search millions of companies in Dun & Bradstreet's global business directory to find detailed company profiles and verify D-U-N-S numbers. Look up key business information like company details and identifiers to support due diligence, sales prospecting, and business intelligence needs.
opencorporates.com API
Access comprehensive company registration data, officer details, and filing histories from OpenCorporates across jurisdictions worldwide to research businesses and their leadership. Search for specific companies or officers, retrieve detailed corporate information, and explore filing records to support due diligence, compliance checks, and business intelligence.
ycombinator.com API
Access comprehensive data from the Y Combinator ecosystem, including company profiles, founder and partner information, job listings, and the YC library. Filter companies by batch, industry, and hiring status, and explore detailed profiles with social links, team information, and funding metadata.
ulprospector.com API
Search and browse chemicals and materials from the UL Prospector database across multiple industries, then retrieve detailed specifications and properties for any material you find. Discover industry-specific products and access comprehensive material information to support your sourcing and product development needs.
kvk.nl API
Search for Dutch businesses and retrieve detailed company information such as registration numbers, addresses, and business details directly from the official KVK trade register. Look up specific companies to access their official registration data and verify business information in the Netherlands.
pappers.fr API
Search French companies and directors to access detailed business profiles, ownership structures, trademark information, and legal filings all in one place. Build professional networks, track company leadership, and monitor business intelligence across France's official registry data.
thebluebook.com API
Search and retrieve company profiles from The Blue Book Building & Construction Network. Find commercial contractors by keyword, trade category (CSI code), and geographic region.