RFC 8805 · RFC 9092
Publish an RFC 8805 geofeed at a URL that stays put. Then find out who reads it.
Import the prefixes your ASN announces, set where they are, and paste one line into your registry object. Every fetch is attributed, so you can tell whether MaxMind, Google or anyone else actually picked the file up.
# network,country,region,city,postal_code
192.0.2.0/24,ES,ES-M,Madrid,28001
198.51.100.0/24,US,US-NY,New York,10001
203.0.113.0/24,DE,,,
2001:db8::/32,ES,ES-B,Barcelona,08001
2001:db8:1::/48,JP,JP-13,Tokyo,100-0001All three are real. The feed is rendered by the same code that serves every live feed and the request returns that 304 today; the prefixes are reserved documentation space (RFC 5737, RFC 3849), so nothing here claims a location for anybody's addresses.
Four steps, and the fourth one is the only one we do not control.
Adding an ASN, importing its prefixes and setting locations takes a few minutes. Then you put one line in your registry object and the discovery chain works on its own.
1.0 Quickstart
Add your ASN
Type the number. Nothing is looked up against your identity — the ownership check happens against the prefixes, in step two.
Import what you announce
Prefixes come from RIPEstat's announced-prefixes view for your ASN, IPv4 and IPv6 together. The largest feed here holds 219 of them; none were typed by hand.
Say where they are
Country is the only required column. Region takes an ISO 3166-2 code, and picking a subdivision fills the code in for you rather than truncating the name.
Point your registry object at it
One attribute on the inetnum or inet6num covering the prefix. RFC 9092 says consumers look there — not on the aut-num, which is where this gets put by mistake.
inetnum: 192.0.2.0 - 192.0.2.255
netname: EXAMPLE-NET
country: ES
geofeed: https://geofeed.network/geofeeds/example.csvYour feed URL is fixed to your account, not to the ASNs in it, so adding or removing an ASN never invalidates what you pasted.
How long step four takes is up to your RIR, not us: a RIPE object update is live in seconds, some registries queue it. Everything before that is done the moment you save it.
A country code on its own is a valid geofeed.
It is also what most published feeds are. This is every prefix currently served from here, counted by which of the five RFC 8805 columns is filled in. Start with the country column; the rest is refinement.
2.0 Field coverage
| COLUMN | n | FILLED |
|---|---|---|
| network | 290 | 100% |
| country | 287 | 99% |
| region | 27 | 9% |
| city | 22 | 8% |
| postal_code | 24 | 8% |
290 prefixes across 14 ASNs, all of them live feeds served by this service, measured 2026-09-09. Bar widths are count ÷ 290.
region, city and postal_code are optional in RFC 8805 and a consumer that cannot use them ignores them. An empty column is never an error; a wrong one is.
The parts that are easy to get wrong.
A geofeed is a five-column CSV file. Nothing about writing one is hard. What costs an operator real accuracy is the handful of details below, each of which has silently broken feeds in the wild — including the ones this service used to generate.
3.0 What it does
- 3.1ISO 3166-2 region codes, resolved not guessed
RFC 8805 wants a subdivision code in column three. The previous version of this app produced one by cutting the region name to two letters, which turned Madrid into ES-MA — not a subdivision that exists. Regions now come from a lookup, both directions: a code gives you its canonical name, a name gives you its code.
192.0.2.0/24,ES,ES-M,Madrid,28001- 3.2IPv6, on the same footing
Parsed, normalised to RFC 5952 form and served in the same file as your IPv4 prefixes. The importer no longer skips anything containing a colon.
2001:db8::/32,ES,ES-B,Barcelona,08001- 3.3Whether your registry object actually points at the feed
The panel queries RDAP through IANA's bootstrap registry and reads the inetnum covering each prefix. Three answers that matter, kept apart: it references your feed, it references a different URL, or it references nothing. The middle one usually means a rename nobody propagated.
geofeed: https://geofeed.network/geofeeds/example.csv- 3.4Who has read it, and when
Every fetch is attributed from its User-Agent and shown per consumer. A geofeed nobody polls fails silently by design, and this is the only signal that it is working. A 304 counts as a read: a provider that revalidated has your data.
user-agent: MaxMind GeoIP Update/1.0- 3.5Conditional requests that work
A strong ETag over the exact bytes, and a Last-Modified taken from your most recent edit. The old generator sent the current time on every response, which no poller could ever act on.
$ curl -sI -H 'If-None-Match: "rHr9KePUYPER2zMEmMd8p9oYriI"' https://geofeed.network/geofeeds/example.csv HTTP/2 304- 3.6Push from your IPAM instead of typing
A read endpoint and a replace endpoint, bearer-token authenticated, 120 requests per minute. Write access is opt-in per token and revoking one takes effect on the next request.
$ curl -sH 'Authorization: Bearer gfn_...' https://geofeed.network/api/v1/prefixes- 3.7Bring the feed you already publish
Paste it and see the diff before anything is written: what would be added, changed, left alone, and — if you asked for a replace — removed. Region names are accepted on the way in and resolved to codes, because that is what existing feeds contain.
preview: 12 add, 3 update, 1 delete, 4 unchanged- 3.8A validator that is not behind the login
Paste a feed or give a URL and get the line numbers. It is public because a format checker that requires an account is useless to the person debugging someone else's feed.
line 14: region "Madrid" is not an ISO 3166-2 code
You do not need this service to publish a geofeed.
A static CSV on a web server you already run is a complete, correct, spec-compliant geofeed, and it puts nobody between you and your consumers. That is a real advantage and it is the first row of the table. Here is the rest of it, honestly.
4.0 Compared with hosting the file yourself
| Static file you host | Here | |
|---|---|---|
| No third party in the path | Yes | No — this is the trade-off |
| Every RFC 8805 consumer can read it | Yes | Yes |
| Region column validated against ISO 3166-2 | Whatever you wrote | Checked before it is served |
| Prefixes kept in step with what you announce | Manual | Imported from RIPEstat |
| Registry reference checked (RFC 9092) | No | RDAP, per prefix |
| Fetches attributed to a provider | Access log, unattributed | Per consumer, with the last read |
| ETag and 304 revalidation | Depends on your server | Strong ETag over the served bytes |
| Cost | Your hosting | Free |
And if you change your mind: download the exact bytes being served and put them on your own server. The only thing to change is the URL in your registry object. There is nothing here to migrate out of.
Nothing, and these are the actual limits.
There is no paid tier, no trial and no card. The service exists because Hostealo runs networks and needed it. The limits below are the ones in the code, not a marketing summary of them.
5.0 What it costs
- Feed requests
- Unlimited. Cache-Control: public, max-age=3600.
- ASNs and prefixes per account
- No cap. The largest account here publishes 219 prefixes.
- API
- 120 requests per minute per token. Unlimited tokens.
- Registry check
- 6 runs per 10 minutes, 25 prefixes per run — the RIRs throttle.
- Paste import
- 10 imports per 10 minutes, 5 000 lines per import.
- Accounts
- Open registration. Two-factor available, TOTP.
Questions an operator actually asks
6.0 Questions
A CSV file listing your prefixes and where they are: network, country, region, city, postal code. RFC 8805 defines it. Geolocation providers read it and use it in preference to guessing from routing data, which is how a prefix that moved to Madrid last month keeps resolving to Ashburn.
From your registry object, not from us. RFC 9092 says a consumer reads the geofeed: attribute on the inetnum or inet6num covering the prefix — or a remarks: Geofeed <url> line where the registry has no dedicated attribute. Putting it on the aut-num instead is the most common mistake; some consumers do look there, most do not.
No. Country is the only column that has to be there. 9% of the prefixes published through this service name a region at all, and they are all valid feeds. A country-level feed that is correct beats a street-level one that is stale.
Yes, and it is treated as load-bearing. Your feed id belongs to your account and does not change when you add or remove an ASN. These URLs sit inside third-party WHOIS objects, so a 404 here is not a broken page — it is your location data going quietly stale at Google and MaxMind with nobody seeing an error. Byte-for-byte output is verified on every deploy.
Consumers keep the copy they have — the feed is sent with a one-hour max-age and a strong ETag, so most polls are revalidations. A failure returns 503 rather than 404, because a 404 tells a consumer you have no geofeed, which is the one wrong answer. You can also download the exact bytes at any time and serve them yourself.
Yes. Create an API token in the panel, GET /api/v1/prefixes to read and PUT to replace. Write access is per token and off by default. The response is the same data the panel shows, so a diff against your source of truth is straightforward.
AP Interactive Solutions S.L., trading as Hostealo.es, in Spain. It started as an internal tool for our own ASNs and is now used by operators in eight countries.
Publish one file. Then find out who read it.
Free, no card, and the validator does not need an account either.
curl -s https://geofeed.network/geofeeds/example.csv
