# A web data API with no official developer account

2026-08-01

> You do not register an app at X, YouTube, or Google. You call a URL. Public JSON comes back.

- Index: https://fetcher.sh/blog.md
- This page (HTML): https://fetcher.sh/blog/web-data-api-no-official-developer-account

![A laptop on a wooden desk showing a code editor](https://images.unsplash.com/photo-1498050108023-c5249f4df085?auto=format&fit=crop&w=1600&q=80)

Photo by [Christopher Gower](https://unsplash.com/photos/m_HRfLhgABo?utm_source=fetcher_sh&utm_medium=referral) on [Unsplash](https://unsplash.com/?utm_source=fetcher_sh&utm_medium=referral).

The official path to public web data is a partnership. You create an app, wait for review, hang a key on a Cloud project, and hope the monthly quota is enough. That is a reasonable model if you are shipping a product *on* Twitter or YouTube. It is a poor model if you just need a tweet, a video page, or a restaurant listing as JSON, once, today.

fetcher.sh is the other shape. Eleven hosts return public data to anyone who can pay for the GET. You do not create a developer account at X, YouTube, or Google. You do not complete OAuth. You call a URL.

[twitter.fetcher.sh](https://twitter.fetcher.sh) is Twitter/X public data. [youtube.fetcher.sh](https://youtube.fetcher.sh) is YouTube. Same pattern for Instagram, TikTok, Reddit, Google Search, Maps, News, Play, the Apple App Store, and Yelp. The directory at [fetcher.sh](/) lists them. Each host is its own API, not a path on the directory, so the Twitter page is about tweets and the Google page is about search.

The response is always a `{ status, message, data }` envelope. A failed call is JSON too, not an HTML error page. Private accounts, DMs, and write access are not in the catalog. If you already have a partner agreement with a platform, keep it. This is for the rest of the public web.

## Call a host, skip the portal

Open a host with no credential. The server answers **402 Payment Required** with machine-readable terms: amount, asset (USDC), network. You sign that challenge and retry, or you skip the loop with a prepaid key.

A $1 top-up at [/topup](/topup) mints a `bby_live_` key. Credits never expire. They are a prepaid USDC balance, not a subscription.

Without a key:

`curl https://twitter.fetcher.sh/api/search?query=hello`

That 402 is the product working. How a call is priced is in [pay per call vs monthly plans](/blog/pay-per-call-vs-monthly-api-plans). How an agent signs it is in [how an agent pays](/blog/how-an-agent-pays-for-a-public-data-request).

The same key works on every host. You do not mint one key for Twitter and another for Maps. You do not create a Google Cloud project to read a Play listing. The portal you skip is the official one; the directory at fetcher.sh is just a map of URLs.

## What “no developer account” actually means

It means you are not a registered app on the platform you are reading. You are a client of fetcher.sh. The objects you get are the public ones: a tweet that anyone can open in a browser, a YouTube video page, a Yelp listing, a Play Store data-safety section.

It does not mean “undocumented private endpoints.” It does not mean write access. It does not mean we impersonate you to a platform. If a listing is public, the host can return it as JSON. If it is not, the envelope says so.

People still ask whether they should apply for the official API *as well*. Yes, if they need to post, to read private data, or to sit inside Ads Manager. No, if the job is “give me this public page as structured data before lunch.” Those are different products. Mixing them in one sentence is how teams stall for a month waiting on a review they never needed.

Human docs live at [/docs](/docs). The Markdown twin is `/docs.md`. Agents can start from [`/skill.md`](/skill.md) or [`/llms.txt`](/llms.txt). Pick a host and fetch.

## A case: an agent that needs one tweet tonight

A researcher is writing a brief on how labs talk about “agentic commerce.” They do not have an X developer account. They do not want one. They need recent public posts from a handful of handles, plus a Google pass over `site:github.com x402`.

The work is three GETs, not a platform onboarding:

- Search on [twitter.fetcher.sh](https://twitter.fetcher.sh) with `from:OpenAI` (the [operator note](/blog/x-search-operators-from-since-until) covers the syntax).
- Resolve the handle to an id if they later want a timeline ([handle resolution](/blog/resolving-a-social-handle-to-a-stable-id)).
- Pull SERP rows from [google.fetcher.sh](https://google.fetcher.sh).

They top up a dollar, send `Authorization: Bearer bby_live_…`, and they are done before the official review email would have arrived. If they never call again, they are not sitting on a monthly SKU.

Suppose the brief expands tomorrow: a YouTube talk, a Reddit thread, a News headline. Those are other hosts, same key. The researcher does not file three more developer applications. They do not wait for YouTube quota. They call [youtube.fetcher.sh](https://youtube.fetcher.sh), [reddit.fetcher.sh](https://reddit.fetcher.sh), and [google-news.fetcher.sh](https://google-news.fetcher.sh) the same way they called Twitter.

That is the eligibility story. The hosts still have their own notes — Twitter is not Google, Maps is not Yelp — because the objects differ. This page is only “you do not need the portal.”

## A case: a contractor who cannot share the company Cloud project

A freelancer is hired for two weeks to pull public App Store listings and Play reviews for a competitor set. The client will not add a contractor to Google Cloud or App Store Connect. The contractor should not hold the client’s official keys.

They use a fetcher.sh key in their own environment. They search both stores, fetch similar apps, pull reviews. At the end of the engagement they can delete the key. Nothing about the client’s publisher accounts was involved, because this work was never publisher work. It was reading the public store.

If the next sprint is “upload a binary,” they are in Connect, not here.

## What we do not sell

We do not sell private data. We do not post on your behalf. We do not replace a firehose contract, Ads Manager, YouTube Studio, or App Store Connect. Official APIs exist for a reason when you are the account owner.

The catalog is public JSON, priced per GET. Start with a host. If the first call returns 402, that is the door opening, not an error page you should screenshot and send to support.
