Discover/Shulem Deen API
live

Shulem Deen APIshulemdeen.com

Access all past speaking events and book signings from shulemdeen.com. Returns event location, date, venue, description, and notes via a single endpoint.

Endpoints
1
Updated
28d ago

What is the Shulem Deen API?

The Shulem Deen API exposes 1 endpoint — get_past_events — that returns the complete archive of past speaking engagements and book signings listed on shulemdeen.com. Each response includes a total count alongside an events array, with per-event fields covering location, date and time, venue, description, and notes. The dataset spans events from 2015 through 2018.

Try it

No input parameters required.

api.parse.bot/scraper/ffc942cb-1d5a-45fd-8fb0-a34f1501678f/<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/ffc942cb-1d5a-45fd-8fb0-a34f1501678f/get_past_events' \
  -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 shulemdeen-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.

"""
Shulem Deen Events API Client

This module provides a Python client for the Shulem Deen Events API,
which scrapes past events from shulemdeen.com.

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

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


class ParseClient:
    """Client for interacting with the Parse API."""

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

        Args:
            api_key: API key for authentication. If not provided,
                    will attempt to load from PARSE_API_KEY environment variable.
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "ffc942cb-1d5a-45fd-8fb0-a34f1501678f"
        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 api_key parameter."
            )

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

        Args:
            endpoint: The API endpoint name.
            method: HTTP method ("GET" or "POST").
            **params: Additional parameters to pass to the API.

        Returns:
            Dictionary containing the API response.

        Raises:
            requests.exceptions.RequestException: If the API call fails.
        """
        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":
            payload = params if params else {}
            response = requests.post(url, headers=headers, json=payload)
        else:
            raise ValueError(f"Unsupported HTTP method: {method}")

        response.raise_for_status()
        return response.json()

    def get_past_events(self) -> Dict[str, Any]:
        """
        Retrieve all past events from Shulem Deen's website.

        Returns:
            Dictionary containing:
                - events: List of event objects with location, date, and details
                - total: Total count of events returned
        """
        return self._call("get_past_events", method="GET")


def parse_event_date(date_str: str) -> datetime:
    """
    Parse event date string into a datetime object.

    Args:
        date_str: Date string in format like "Tue 3/24/2015 7pm"

    Returns:
        Parsed datetime object (time component approximated to hour only).
    """
    # Simple parser for common date formats
    formats = ["%a %m/%d/%Y %I%p", "%a %m/%d/%y %I%p"]
    for fmt in formats:
        try:
            return datetime.strptime(date_str, fmt)
        except ValueError:
            continue
    # Return None if parsing fails
    return None


def format_event_display(event: Dict[str, str]) -> str:
    """
    Format an event dictionary for display.

    Args:
        event: Event dictionary with location, date, and details.

    Returns:
        Formatted string representation of the event.
    """
    location = event.get("location", "Unknown Location")
    date = event.get("date", "Unknown Date")
    details = event.get("details", [])

    output = f"\n📍 {location}"
    output += f"\n📅 {date}"

    if details:
        output += "\n📝 Details:"
        for detail in details:
            output += f"\n   • {detail}"

    return output


def main():
    """Main execution demonstrating practical API usage."""
    # Initialize the client
    client = ParseClient()

    print("=" * 70)
    print("Shulem Deen Events API - Event Retrieval Example")
    print("=" * 70)

    # Fetch all past events
    print("\n🔄 Fetching past events from shulemdeen.com...")
    response = client.get_past_events()

    events = response.get("events", [])
    total_count = response.get("total", 0)

    print(f"\n✅ Retrieved {total_count} events total\n")

    # Analyze and display events
    print(f"Showing first 10 events:\n")

    parsed_events = []

    for idx, event in enumerate(events[:10], 1):
        print(f"{idx}. {format_event_display(event)}\n")

        # Attempt to parse date for sorting
        parsed_date = parse_event_date(event.get("date", ""))
        if parsed_date:
            parsed_events.append({"event": event, "parsed_date": parsed_date})

    # Group events by location (practical use case)
    print("\n" + "=" * 70)
    print("Events Grouped by Location (all events)")
    print("=" * 70)

    location_groups: Dict[str, List[Dict]] = {}

    for event in events:
        location = event.get("location", "Unknown")
        if location not in location_groups:
            location_groups[location] = []
        location_groups[location].append(event)

    # Sort locations by event count
    sorted_locations = sorted(
        location_groups.items(), key=lambda x: len(x[1]), reverse=True
    )

    print(f"\nFound {len(location_groups)} unique locations:\n")

    for idx, (location, location_events) in enumerate(sorted_locations[:15], 1):
        print(f"{idx}. {location}: {len(location_events)} event(s)")

    # Summary statistics
    print("\n" + "=" * 70)
    print("Summary Statistics")
    print("=" * 70)
    print(f"Total Events: {total_count}")
    print(f"Unique Locations: {len(location_groups)}")
    print(f"Top Location: {sorted_locations[0][0]} ({len(sorted_locations[0][1])} events)")

    if parsed_events:
        # Sort by date
        parsed_events.sort(key=lambda x: x["parsed_date"])
        earliest = parsed_events[0]["parsed_date"]
        latest = parsed_events[-1]["parsed_date"]
        print(f"Date Range: {earliest.strftime('%B %Y')} to {latest.strftime('%B %Y')}")


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

Retrieves all past events listed on shulemdeen.com/events. Returns a list of events with location, date/time, and additional details such as venue, description, and notes. Events span from 2015 to 2018.

Input

No input parameters required.

Response
{
  "type": "object",
  "fields": {
    "total": "integer count of events returned",
    "events": "array of event objects with location, date, and details"
  },
  "sample": {
    "total": 94,
    "events": [
      {
        "date": "Tue 3/24/2015 7pm",
        "details": [
          "BOOK LAUNCH"
        ],
        "location": "Brooklyn, NY"
      },
      {
        "date": "Thur 3/26/15 7pm",
        "details": [
          "BOOK PARTY: For Footsteps members and guests only. If you are not a Footsteps member and would like to attend, please contact Footsteps.",
          "The Footsteps Space",
          "Books will be available for sale at cost."
        ],
        "location": "New York City"
      },
      {
        "date": "Thur 4/9/15 7pm",
        "details": [
          "Main Point Books, 1041 W Lancaster Ave, Bryn Mawr, PA 19010"
        ],
        "location": "Philadelphia, PA"
      }
    ]
  }
}

About the Shulem Deen API

What the API Returns

The get_past_events endpoint returns a structured list of all past events from shulemdeen.com/events. The top-level response includes a total integer showing how many events were found, and an events array containing one object per event. Each event object carries fields for location, date/time, venue, description, and any additional notes attached to the listing.

Event Coverage and Scope

All events in the dataset are historical, spanning 2015 to 2018. They include speaking engagements, book signings, and similar public appearances by author Shulem Deen. The endpoint takes no input parameters — a single call retrieves the full archive without pagination or filtering required.

Response Shape

The events array contains objects where each entry provides enough detail to reconstruct the public event listing: where it was held (location and venue), when it occurred (date and time), what it was about (description), and any supplementary remarks (notes). The total field at the top level gives an immediate count without iterating the array.

Reliability & maintenance

The Shulem Deen API is a managed, monitored endpoint for shulemdeen.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when shulemdeen.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 shulemdeen.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
  • Build an author profile page that lists Shulem Deen's full public appearance history with dates and venues.
  • Aggregate event data from multiple authors to compare speaking tour patterns across years.
  • Cross-reference event locations against a map to visualize geographic reach of a book promotion tour.
  • Populate a research database of Jewish memoir author public engagements for academic study.
  • Feed event descriptions and notes into a text corpus for NLP or sentiment analysis projects.
  • Track how event activity changed year-over-year between 2015 and 2018 using the date fields.
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 shulemdeen.com have an official developer API?+
No. Shulem Deen's author website does not publish an official developer API or documented data access layer. This Parse API is the only structured way to retrieve the event data programmatically.
What does `get_past_events` actually return for each event?+
Each object in the events array includes the event location, date and time, venue name, a text description of the event, and any notes listed on the page. The top-level total field gives the count of all returned events.
Can I filter events by year, location, or event type?+
The endpoint accepts no input parameters and returns the full archive in a single call. Filtering by year, location, or event type is not built in. You can fork this API on Parse and revise it to add server-side filtering on any of those fields.
Does the API include upcoming or future events?+
No. The dataset covers only past events from 2015 to 2018 as listed on the events archive page. Future or currently scheduled events are not included. You can fork this API on Parse and revise it to target a different section of the site if new event listings appear.
How current is the event data?+
The source page at shulemdeen.com/events is a static archive; the most recent events in the dataset are from 2018. The data reflects what is publicly listed on that page and is not expected to change unless the author updates the site.
Page content last updated . Spec covers 1 endpoint from shulemdeen.com.
Related APIs in EntertainmentSee all →
store.steampowered.com API
Search Steam Store listings, fetch featured categories (specials, top sellers, new releases), and retrieve app details and user reviews by Steam AppID.
store.epicgames.com API
Access data from store.epicgames.com.
seatgeek.com API
Search for events and performers, view ticket listings with pricing data, and explore venue information across multiple event categories. Get real-time insights into event details, ticket price trends, and what's currently trending to help you find and compare tickets.
poe.ninja API
Access real-time Path of Exile economy data from poe.ninja, including item prices, currency exchange rates, divination card values, market trends, and build statistics by class.
justwatch.com API
Search for movies and TV shows, retrieve streaming availability and detailed metadata, browse trending content, and discover similar titles — all via JustWatch.
axs.com API
Search for events, performers, and venues across AXS.com to find tickets, pricing, and availability information in your area or by category. Browse featured events, explore venues by city, and access detailed event information all in one place.
in.bookmyshow.com API
Browse movies and live events across Indian cities on BookMyShow. Retrieve recommended and now-showing movies, upcoming releases, and event listings with full details including cast, synopsis, ticket info, and similar recommendations.
ticketone.it API
Browse upcoming events and search for artists or venues on TicketOne.it, then check real-time ticket availability and get detailed event information all in one place. Discover featured events by category or search directly to find events to attend.