Petfinnly Shelters API

Petfinnly maintains a directory of real, currently operating cat and kitten shelters and rescue organizations across the United States, contact info, adoption details, and (where available) county-level demographic context. This API gives you programmatic access to that same data, free, with a rate limit generous enough for a real app.

Get a free API key

No email verification, no card, and no expiration. One key per email, requesting again regenerates it.

Authentication

Pass your key as an X-API-Key header on every request:

curl "https://petfinnly.com/api/v1/shelters" \ -H "X-API-Key: YOUR_API_KEY"

For quick testing in a browser, a ?api_key=YOUR_API_KEY query parameter works the same way.

Endpoints

Method & pathDescription
GET /api/v1/sheltersPaginated, filterable list of published shelters.
GET /api/v1/shelters/{id}A single shelter by its numeric id.
GET /api/v1/shelters/{state}/{slug}A single shelter by the same state/slug shown in its petfinnly.com URL.
GET /api/v1/statesEvery state with a published shelter count, alphabetical.

List filters (GET /api/v1/shelters)

ParamMeaning
stateTwo-letter state code (CA) or state slug (california).
cityExact city match, case-insensitive.
zipExact ZIP code match.
qSubstring search on shelter name.
claimedtrue or false.
featuredtrue or false.
pageDefaults to 1.
per_pageDefaults to 25, maximum 100.

Example

A single shelter, exactly what GET /api/v1/shelters/{id} and GET /api/v1/shelters/{state}/{slug} return, and the shape of each item inside a list response's data array:

{
  "id": 3110,
  "name": "1Love4Animals",
  "slug": "1love4animals",
  "url": "https://petfinnly.com/shelters/pennsylvania/1love4animals",
  "state_code": "PA",
  "state_name": "Pennsylvania",
  "city": "Southeastern",
  "address": "PO Box 1414, Southeastern, PA 19399",
  "zip": "19399",
  "phone": "610-405-1514",
  "email": "billsmith4animals@gmail.com",
  "website_url": "https://www.1love4animals.org",
  "is_claimed": false,
  "is_featured": false,
  "updated_at": "2026-08-31T20:55:13Z"
}

GET /api/v1/shelters wraps a page of these in an envelope:

{
  "data": [ ... ],
  "pagination": { "page": 1, "per_page": 25, "total": 1111, "total_pages": 45 }
}

Fields left out of a given shelter (no confirmed phone, no matched county for demographics, and so on) are omitted rather than sent as an empty string or fabricated.

Rate limits

60 requests per minute per API key. Every response includes X-RateLimit-Limit and X-RateLimit-Remaining headers; going over returns a 429 with a Retry-After header telling you how many seconds to wait. Need a higher limit for a real project? Contact us.

CORS

Every /api/v1/ response allows cross-origin requests, so you can call this API directly from client-side JavaScript without a proxy.

Terms of use

This data is free to use in your own project, attribution to Petfinnly is appreciated but not required. Don't use it to spam the shelters and organizations listed here. Full details in our Terms & Conditions.