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.1.tar.gz (20.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.1-py3-none-any.whl (19.5 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for devpost_api-1.0.1.tar.gz
Algorithm Hash digest
SHA256 0f861c03f792c3eae9f8c07400228df86458a5d0d06ead0a7b3ab0bd1b0b663f
MD5 5c84576557a4644ab58bc1c4f939f7be
BLAKE2b-256 f616dbee546394c9c79eccb10206c820dc77d9222e52417024753607744c5812

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for devpost_api-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a6e15dee4d232191cc1b1b2b215e89caef356f9719e500cc392343a008c0c545
MD5 5788869f6b0514ee6f201d2099a5d528
BLAKE2b-256 1d42648322ed433a55d5ffd212f09b2210ac06cddf58582394fa1e60f8f84f9d

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