Skip to main content

Unofficial Devpost API client with resilient scraping, typed models, and CLI tooling.

Project description

devpost-api

Unofficial Devpost API and scraping client for hackathon scouting workflows.

CI PyPI Python License

Why use this package

  • No runtime dependencies (stdlib only)
  • Typed models and predictable public API
  • Built-in retries, exponential backoff, and rate-limit handling
  • Optional request throttling, cache, and parallel fetch
  • CLI designed for scripts (json, jsonl, csv, table)

Naming and install model

  • Install package: pip install devpost-api
  • Python import path: import devpost_api
  • CLI command: devpost-api

Install

pip install devpost-api

From source:

pip install -e ".[dev]"

Quickstart (Python)

from devpost_api import DevpostClient, RetryConfig

client = DevpostClient(
    retry_config=RetryConfig(max_attempts=4, backoff_factor=0.5),
    max_workers=8,
    min_request_interval=0.05,
    cache_ttl=30.0,
)

for project in client.iter_software(query="ai", max_pages=2):
    print(project.name)

batch = client.collect_projects(
    [
        "https://devpost.com/software/api",
        "https://devpost.com/software/does-not-exist",
    ],
    include_github=True,
)
print(len(batch.projects), len(batch.failures))

Quickstart (CLI)

# JSON (default)
devpost-api software --query ai --page 1

# CSV for shell pipelines
devpost-api --format csv --fields name,url software --query ai --page 1

# Batch project fetch from a file (one URL/slug per line)
devpost-api --format jsonl project --input-file projects.txt --with-github --best-effort

# Batch GitHub enrichment from stdin
printf "openai/openai-python\npsf/requests\n" | devpost-api github --stdin --best-effort --format table

If devpost-api is not on your PATH, use python -m devpost_api.cli ....

Public API

  • DevpostClient.list_software(page=1, query=None)
  • DevpostClient.list_users(page=1)
  • DevpostClient.list_hackathons(page=1, status=None)
  • DevpostClient.iter_software(query=None, start_page=1, max_pages=None)
  • DevpostClient.iter_users(start_page=1, max_pages=None)
  • DevpostClient.iter_hackathons(status=None, start_page=1, max_pages=None)
  • DevpostClient.get_project(slug_or_url, include_github=False, raise_on_error=True)
  • DevpostClient.get_projects(slugs_or_urls, include_github=False, raise_on_error=True)
  • DevpostClient.collect_projects(slugs_or_urls, include_github=False)
  • DevpostClient.get_github_repo(url_or_owner_repo)
  • DevpostClient.get_github_repos(urls_or_owner_repo, raise_on_error=True)
  • DevpostClient.list_hackathon_project_urls(hackathon_slug_or_url, pages=1)
  • DevpostClient.scout_hackathon_projects(hackathon_slug_or_url, pages=1, include_github=False, raise_on_error=True)
  • DevpostClient.clear_cache()

Reliability knobs

  • --retries, --backoff, --max-backoff, --jitter
  • --workers for parallel bulk operations
  • --min-interval for global request spacing
  • --cache-ttl for in-memory GET cache
  • --best-effort for batch item error tolerance

Development workflow

Run tests:

python -m unittest discover -s tests

Run quality checks:

ruff check .
mypy src
coverage run -m unittest discover -s tests
coverage report

Build and verify artifacts:

python -m build
python -m twine check dist/*

Notes

  • This package is unofficial and not affiliated with Devpost.
  • Use responsibly and comply with Devpost and GitHub terms/policies.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

devpost_api-1.0.2.tar.gz (26.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

devpost_api-1.0.2-py3-none-any.whl (22.5 kB view details)

Uploaded Python 3

File details

Details for the file devpost_api-1.0.2.tar.gz.

File metadata

  • Download URL: devpost_api-1.0.2.tar.gz
  • Upload date:
  • Size: 26.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.6

File hashes

Hashes for devpost_api-1.0.2.tar.gz
Algorithm Hash digest
SHA256 766ae03cd54ca8ce392241998cf8b7aff683eabb95537002d24b428a09f8f23d
MD5 bbb9a0779fada155ad275c85993f5a6b
BLAKE2b-256 6c9fb853cdee7a9627d228cf28409248fb502049967fe9e3f6022f412802b5fb

See more details on using hashes here.

File details

Details for the file devpost_api-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: devpost_api-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 22.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.6

File hashes

Hashes for devpost_api-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 03fa2035eddb1045130ae65f12513f76f1f035ca1664a93ddedc3e0882881ffd
MD5 efb949cf832ed87f674c3c5e31936a0e
BLAKE2b-256 eda446f82141fe4c6d6b2bde78e0dfddc7792ab142a888d82c22ea8c6cabbad5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page