{"id":50412830,"url":"https://github.com/tovuk/tovuk","last_synced_at":"2026-07-03T07:01:20.962Z","repository":{"id":360175458,"uuid":"1248999475","full_name":"tovuk/tovuk","owner":"tovuk","description":"Public tovuk packages, CLI, skills, and examples","archived":false,"fork":false,"pushed_at":"2026-07-02T00:14:26.000Z","size":3699,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-02T02:19:22.680Z","etag":null,"topics":["agents","backend","cli","deploy","hosting","rust","tovuk"],"latest_commit_sha":null,"homepage":"https://tovuk.com","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tovuk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"docs/support.mdx","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-25T08:50:12.000Z","updated_at":"2026-07-02T00:14:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tovuk/tovuk","commit_stats":null,"previous_names":["zerct/zerct","tovuk/tovuk"],"tags_count":56,"template":false,"template_full_name":null,"purl":"pkg:github/tovuk/tovuk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tovuk%2Ftovuk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tovuk%2Ftovuk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tovuk%2Ftovuk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tovuk%2Ftovuk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tovuk","download_url":"https://codeload.github.com/tovuk/tovuk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tovuk%2Ftovuk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35075805,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-03T02:00:05.635Z","response_time":110,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agents","backend","cli","deploy","hosting","rust","tovuk"],"created_at":"2026-05-31T05:00:16.450Z","updated_at":"2026-07-03T07:01:20.935Z","avatar_url":"https://github.com/tovuk.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tovuk\n\nTovuk is a paid public-data scraper API with a native Rust CLI. Use it to list\navailable scrapers, create scraper requests, poll request status, fetch stored\nrecords, inspect usage, manage billing, and contact support.\n\nThe public CLI is intentionally narrow. It does not deploy websites, backends,\ndatabases, workers, storage buckets, queues, cron jobs, custom domains,\nsecrets, or other customer infrastructure.\n\n## Install\n\n```sh\ncargo install tovuk\nnpm install -g tovuk\npipx install tovuk\nbrew tap tovuk/tovuk https://github.com/tovuk/tovuk\nbrew install tovuk\n```\n\nThe npm and PyPI packages are thin launchers for the same native Rust binary.\nThey do not ship runtime JavaScript dependencies.\n\n## Agent Workflow\n\nFor agent sessions, set JSON output once:\n\n```sh\nexport TOVUK_OUTPUT=json\n```\n\nThen use the scraper workflow:\n\n```sh\ntovuk login --json\ntovuk account show --json\ntovuk account activity --json\ntovuk api-key list --json\ntovuk api-key create \"Production scraper\" --json\ntovuk api-key revoke api_key_0123456789abcdef01234567 --json\ntovuk pricing --json\ntovuk scraper list --json\ntovuk scraper health --json\ntovuk scraper show tiktok --json\ntovuk request list --limit 20 --json\ntovuk request list --limit 20 --cursor \u003cnextCursor\u003e --json\ntovuk request create tiktok '{\"operation\":\"search\",\"query\":\"rust programming\",\"limit\":100}' --json\ntovuk request create github '{\"operation\":\"codeSearch\",\"query\":\"serde language:Rust\",\"maxRepos\":3,\"limit\":100}' --json\ntovuk request create linkedin '{\"operation\":\"post-search\",\"query\":\"b2b sales\",\"sort_type\":\"date_posted\",\"author_company_urns\":\"1035\",\"limit\":50}' --json\ntovuk request show request_123 --json\ntovuk request results request_123 --limit 1000 --json\ntovuk request cancel request_123 --json\ntovuk usage --json\ntovuk billing checkout plus --json\ntovuk billing portal --json\ntovuk support list --limit 20 --json\ntovuk support create \"Request failed\" \"The scraper request failed after retry. First error: upstream timeout.\" --request-id request_123 --scraper-id tiktok --failing-command \"tovuk request show request_123 --json\" --first-log-line \"upstream timeout\" --severity normal --json\ntovuk support resolve ticket_0123456789abcdef0123 --json\n```\n\nUse `tovuk request list --limit \u003cn\u003e --cursor \u003cnextCursor\u003e --json` and\n`tovuk request results \u003crequest_id\u003e --limit \u003cn\u003e --cursor \u003cnextCursor\u003e --json`\nto continue request and stored-result pagination.\n\nSupport tickets are account-scoped service tickets between your account and\nTovuk. Users and AI/API agents can open them through the CLI or by calling\n`POST /v1/support/tickets` with an account API key or session bearer token.\nTicket responses include `created_by` for account-session versus account-API-key\nattribution.\n\n## Public-Data Boundary\n\nScraper requests are public data only. They must use public URLs, public search terms, public profile\nhandles, public place ids, or public identifiers only. Do not send cookies,\npasswords, account tokens, private session data, private account content,\nprivate repository credentials, or proxy URLs through the public API or CLI.\n\nUse `tovuk pricing --json` and `tovuk usage --json` before high-count requests.\nPricing responses expose exact scraper prices in `priceEvents[].usdMicros`.\nUsage responses expose current-month estimates in\n`usage.billingEstimate.lineItems`.\n\n## API\n\nPrimary routes:\n\n```http\nGET /health\nGET /healthz\nGET /v1/status\nPOST /v1/login/device\nGET /v1/login/device/{device_code}\nGET /v1/account\nGET /v1/account/overview\nGET /v1/account/activity\nGET /v1/scrapers\nGET /v1/scrapers/health\nGET /v1/scrapers/{scraper}\nGET /v1/requests\nPOST /v1/requests\nGET /v1/requests/{request_id}\nPOST /v1/requests/{request_id}/cancel\nGET /v1/requests/{request_id}/results\nGET /v1/usage\nPOST /v1/billing/checkout\nPOST /v1/billing/portal\nGET /v1/support/tickets\nPOST /v1/support/tickets\nPOST /v1/support/tickets/{ticket_id}/resolve\n```\n\n## Development\n\n```sh\n./scripts/check-all.sh\n```\n\nThe full check builds the native CLI, runs Rust tests and strict Clippy, checks\npackage wrappers, validates docs and OpenAPI, and confirms retired deploy and\nresource commands remain unavailable.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftovuk%2Ftovuk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftovuk%2Ftovuk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftovuk%2Ftovuk/lists"}