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.
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--workersfor parallel bulk operations--min-intervalfor global request spacing--cache-ttlfor in-memory GET cache--best-effortfor 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
Release history Release notifications | RSS feed
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)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f861c03f792c3eae9f8c07400228df86458a5d0d06ead0a7b3ab0bd1b0b663f
|
|
| MD5 |
5c84576557a4644ab58bc1c4f939f7be
|
|
| BLAKE2b-256 |
f616dbee546394c9c79eccb10206c820dc77d9222e52417024753607744c5812
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a6e15dee4d232191cc1b1b2b215e89caef356f9719e500cc392343a008c0c545
|
|
| MD5 |
5788869f6b0514ee6f201d2099a5d528
|
|
| BLAKE2b-256 |
1d42648322ed433a55d5ffd212f09b2210ac06cddf58582394fa1e60f8f84f9d
|