Giphy Scraper (keyless) avatar

Giphy Scraper (keyless)

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Giphy Scraper (keyless)

Giphy Scraper (keyless)

No API key needed. Scrape Giphy's official API: search, trending, stickers, clips, emoji, translate, random, by-id, categories. Deep pagination, direct GIF/WebP/MP4 download, optional user API key override.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

subimpact

subimpact

Maintained by Community

Actor stats

0

Bookmarked

34

Total users

16

Monthly active users

a day ago

Last modified

Security

Limited permissions

Share

Keyless Giphy Scraper

Scrape GIFs, stickers, clips and emoji from the official Giphy public API — no API key required.

How this compares

Both other actors in this lane list a lower per-result price, so the difference here is capability rather than price. This actor needs no API key: it reuses the public web-client key Giphy's own site embeds, and accepts your own key through the apiKey input if you have one. One actor covers search, trending, byIds, random, translate, categories and emoji modes, includes stickers and clips, and can save media to the key-value store, all over plain HTTP with no browser and no proxy. Price: $0.001 per result item ($1.00 per 1,000), plus $0.002 per media file when downloadMedia is on.

ActorPrice per 1,000 resultsPlatform usage
subimpact/giphy-scraper$1.00Included
parseforge/giphy-scraper$0.14see listing
alizarin_refrigerator-owner/giphy-api$0.01 plus $10.00 per 1,000 API callssee listing

Prices are Apify Store list prices on the Free plan, checked 24 October 2026. Competitor prices can change; check their listings.

Why keyless?

Giphy's public API officially requires a user API key: beta keys are rate-limited (~100 calls/hour) and production keys need human review + paid pricing. This actor reuses the same public web-client key that Giphy's own website embeds, so plain HTTP calls work with no key, no browser, no proxy, no rate limiting. Users who have their own key can override via the apiKey input (or GIPHY_API_KEY env var).

Modes

modeendpointinput
search/v1/gifs/search (+ /v1/stickers/search, /v1/clips/search opt-in)searchTerms[]
trending/v1/gifs/trending + /v1/stickers/trending—
byIds/v1/gifs?ids=gifIds[]
random/v1/gifs/randomrandomTags[]
translate/v1/gifs/translatetranslateText
categories/v1/gifs/categories—
emoji/v1/emoji—

Search mode hits /v1/stickers/search for each term by default (includeStickers), and /v1/clips/search when includeClips is on. Clips carry mp4_720 variants. Note: limit applies per content type and stickers are included and charged by default — with the default includeStickers: true and limit: 5 a run delivers up to 5 GIFs plus 5 stickers (10 rows), each charged as a delivered result-item.

Inputs

  • mode — endpoint to hit (default search)
  • searchTerms[] — one API call per term (default ["funny cat"])
  • gifIds[], randomTags[], translateText — mode-specific payloads
  • limit — items to fetch per content type per term/call, hard-capped at 150 by the API (200+ returns empty). With includeStickers: true (the default) you get up to limit GIF results and up to limit sticker results, each charged as a delivered row
  • offset — pagination start (deepPagination walks offset += limit until an empty page or offset ≥ 250, because Giphy deep pagination stops advancing around offset 250)
  • maxItems — optional global safety cap on delivered rows across all terms and content types; 0 (default) = unlimited
  • rating (g/pg/pg-13/r), lang
  • downloadMedia — download each file (GIF/WebP/MP4) into the run's default key-value store. The persistent artifact is the kvsUrl (https://api.apify.com/v2/key-value-stores/{storeId}/records/{key}) and the files also appear in the run's Key-Value Store in the Apify Console. Records also carry localFilePath for backwards compatibility, but container local storage is ephemeral and is not accessible after a cloud run finishes (it only exists for local runs); use kvsUrl
  • downloadFormat — preview (preview_gif), downsized, original (default preview)
  • maxDownloadSizeMb — skip files larger than this (checked against images[].size)

Output record

giphyId, gifType (gif/sticker/clip/emoji/category), url, gifTitle, altText, username, userDisplayName, userVerified, userAvatarUrl, rating, source, tags[], createDatetime, trendingDatetime, embedUrl, bitlyUrl, variantUrls.{preview,downsized,original,mp4} (url + size + width + height; empty variants kept as {url:""}), optional searchTerm, subcategories/gif in categories mode, and kvsUrl when media download is enabled (localFilePath is also set but only resolves inside a run container/local run — see above). An uncharged status row with an error message is emitted when malformed upstream results had to be dropped.

Robustness

  • Results are streamed: each page is pushed to the dataset and charged in batches of ≤ 10 rows as it is delivered (with a final flush), so a timed-out run keeps what it collected — and only what is delivered is charged
  • 20 s per-request timeout, up to 3 retries with exponential backoff on 5xx/429/network errors
  • Hard stop with a clear error if the key is rejected twice (401/403) — suggests the apiKey input in case Giphy rotates the embedded key
  • True empty results (HTTP 200 + empty data) end as a legitimate empty run; upstream API errors (HTTP != 200 or meta.status != 200) fail the run with a clear status message rather than being silently reported as a successful 0-row run
  • Malformed upstream records (missing id/url) are dropped uncharged and reported via a status row in the dataset
  • Non-200 media downloads are skipped without killing the run

Local development

python -m venv .venv && . .venv/bin/activate
pip install -r requirements.txt
python -m pytest tests/ -v # live-network tests (real API, default key)
apify push # push a new PRIVATE build