Official Python client for the OSINTverse SearchIn API (osintverse.com).
This is the official client for OSINTverse SearchIn: one REST API for LeakRadar, OSINT Industries, Facecheck.id, SecurityTrails, and every other SearchIn provider.
It talks to https://apiv1.osintverse.com. It is not affiliated with other products that reuse the OSINTverse name.
Install
pip install osintverse
Create an API key at Dashboard → API keys. Keys use the ov_ prefix and are shown only once.
Quick start
from osintverse import OSINTverse
client = OSINTverse() # reads OSINTVERSE_API_KEY, or pass api_key="ov_…"
providers = client.providers.list()
search = client.search.create(
provider="leakradar-lite",
input_type="email",
query="user@example.com",
wait=True, # poll GET /v1/search/{id} every ~2s when status is running
)
print(search.status, search.cost_usd, len(search.result.matches if search.result else []))
Async:
from osintverse import AsyncOSINTverse
async with AsyncOSINTverse() as client:
search = await client.search.create(
provider="leakradar-lite",
input_type="email",
query="user@example.com",
wait=True,
)
Auth
- Header:
x-api-key(the SDK sets this for you) - Env:
OSINTVERSE_API_KEY - Docs: https://osintverse.com/docs/python
GET /health and GET /v1/providers do not require a key. Search routes do.
Methods
| SDK | HTTP |
|---|---|
client.health() |
GET /health |
client.providers.list() |
GET /v1/providers |
client.search.create(...) |
POST /v1/search |
client.search.bulk(...) |
POST /v1/search/bulk |
client.search.retrieve(id) |
GET /v1/search/{id} |
client.search.unlock(id) |
POST /v1/search/{id}/unlock |
client.search.premium(id) |
POST /v1/search/{id}/premium |
batch = client.search.bulk(
input_type="email",
queries=["alice@example.com", "bob@example.com"],
providers=["leakradar-lite", "dehashed"],
wait=True,
)
client.search.unlock(search.id) # LeakRadar leftover credentials
client.search.premium(search.id) # OSINT Industries premium modules
wait=True on create raises SearchFailedError / SearchRefundedError if the job ends in failed or refunded. Bulk wait polls running jobs and returns the batch — inspect summary for partial success.
Errors
HTTP { "detail": "…" } maps to AuthenticationError (401), PaymentRequiredError (402), ForbiddenError (403), NotFoundError (404), ValidationError (422), and APIError (5xx).
Development
pip install -e ".[dev]"
pytest
ruff check src tests
License
MIT
Publishing
CI runs lint and tests on every push. PyPI publishes from .github/workflows/publish.yml on v* tags using Trusted Publishing.
- On PyPI, add a pending trusted publisher for project osintverse: GitHub owner
dheerajydv19, repoosintverse-pythonsdk, workflowpublish.yml, environment blank. - Tag a release:
git tag v0.1.0 && git push origin v0.1.0.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
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 osintverse-0.1.0.tar.gz.
File metadata
- Download URL: osintverse-0.1.0.tar.gz
- Upload date:
- Size: 33.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
134c8155b773941ea561aca7eecb51b2059bfae519339700d862d601e9130dfe
|
|
| MD5 |
cf424b0a81c97d750ed8fa8b67b67113
|
|
| BLAKE2b-256 |
9deb990675eb30e734b7475ea4c5bb0d3e0551628bfbdace85780457af121ca9
|
Provenance
The following attestation bundles were made for osintverse-0.1.0.tar.gz:
Publisher:
publish.yml on dheerajydv19/osintverse-pythonsdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
osintverse-0.1.0.tar.gz -
Subject digest:
134c8155b773941ea561aca7eecb51b2059bfae519339700d862d601e9130dfe - Sigstore transparency entry: 2884842414
- Sigstore integration time:
-
Permalink:
dheerajydv19/osintverse-pythonsdk@c039fb2fcc9de403fc71a9e9419ed2804298864e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/dheerajydv19
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c039fb2fcc9de403fc71a9e9419ed2804298864e -
Trigger Event:
push
-
Statement type:
File details
Details for the file osintverse-0.1.0-py3-none-any.whl.
File metadata
- Download URL: osintverse-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e18de8769629ccb3b069493e72d09622f4d1623ed0b1d4047c41f3da66ffad0
|
|
| MD5 |
7e4399efd1d085b81b8f7774026f481d
|
|
| BLAKE2b-256 |
45a14c9e25141d9f0777fba75581c130d36fd31a270a630aa03a774253b4e61b
|
Provenance
The following attestation bundles were made for osintverse-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on dheerajydv19/osintverse-pythonsdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
osintverse-0.1.0-py3-none-any.whl -
Subject digest:
9e18de8769629ccb3b069493e72d09622f4d1623ed0b1d4047c41f3da66ffad0 - Sigstore transparency entry: 2884842667
- Sigstore integration time:
-
Permalink:
dheerajydv19/osintverse-pythonsdk@c039fb2fcc9de403fc71a9e9419ed2804298864e -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/dheerajydv19
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@c039fb2fcc9de403fc71a9e9419ed2804298864e -
Trigger Event:
push
-
Statement type: