# Changelog of Social Handles · Bulk Availability (`corent1robert/social-handle-checker`) Actor

- **URL**: https://apify.com/corent1robert/social-handle-checker/changelog.md
- **Full Actor documentation**: https://apify.com/corent1robert/social-handle-checker.md

## Changelog

### 1.13 — 2026-09-01

#### Changed

- PPE handle event scheduled **15 September 2026**: Free $0.005 → $0.006 (Bronze $0.00528, Silver $0.00456, Gold $0.00372). Still one event per handle, not per network. Paying users notified 1 September.
- Non-Instagram checks use their own HTTP pool (64 in cloud, no startup stagger). Instagram keeps its 10–13 slots and 100 ms stagger — unchanged.
- Telegram: `Launch @` titles count as taken; `Contact @` counts as free even when the page widget is present.

#### Fixed

- Reddit: if `about.json` is blocked (403), fall back to the public profile HTML. Bot-check interstitial pages stay `error`.

### 1.12 — 2026-08-28

#### Added

- **Actor Standby:** HTTP lookup `GET`/`POST /lookup` — one handle or up to **5** handles. Coverage defaults to **launch** (Instagram + TikTok). Console **Start** still writes the dataset as before.
- OpenAPI spec for the Standby tab (`web_server_openapi.json`)

### 1.11 — 2026-08-25

#### Added

- Console **Coverage** presets: Launch (Instagram + TikTok), All 15, Fast (no Instagram/Threads), Custom.
- **Reddit, Bluesky, Telegram, GitLab, SoundCloud** — five extra networks (15 total). LinkedIn still omitted (`/in/` is not a vanity handle).
- Dataset: `url_{platform}` when status is `no` (taken), empty otherwise. `confidence_{platform}` is `high` or `low` (`low` for Facebook and Twitch HTML heuristics).
- PPE: **$0.005** / handle on Free (was $0.01). Still one event per handle, not per network.

#### Changed

- README: buyer-first coverage table; HTTP/TLS details moved to **Internals**.
- Input JSON examples use string handles. Default Try coverage is **Launch** (saved tasks that only set `platforms` are unchanged).
- Run log: no proxy hostnames in default output.
- Default memory 1024 MB (was 4096). Categories: `SOCIAL_MEDIA`, `LEAD_GENERATION`, `AUTOMATION` (dropped `DEVELOPER_TOOLS`).

### 1.10 — 2026-08-18

#### Added

- **8 more Store Examples** (12 total) — X/YouTube, Meta trio, creator alias, fintech, TikTok+YT, rebrand, IG+Threads, GitHub+X.

### 1.9 — 2026-08-17

#### Added

- **4 published tasks** (startup names, agency pitch, IG+TikTok only, GitHub/Snap/Twitch) + `allPlatforms` dataset view.
- README: Who is this for, Quick start, pricing/legal H2s, Examples table.

#### Changed

- Store listing: middle-dot title, `seoTitle` with `| Apify`, shorter benefit-first description.

### 1.8 — 2026-08-17

#### Changed

- **Free plan cap:** 20 handles per run (`APIFY_USER_IS_PAYING`). Status: `Free plan: 20 handles. Upgrade for bulk.`
- **Export:** one dataset row at a time. Stops when the PPE budget is exhausted (`chargedCount` / remaining events).
- Anonymous Try-without-account runs disabled (`isAnonymouslyRunnable: false`).
- README + input schema: Free plan 20 handles / run. Paid: unlimited (budget). Console prices unchanged.

### 1.7.0 — 2026-07-05

#### Added

- **GitHub** — new platform `github` and column `available_github`. Uses `api.github.com/users/{handle}` (public REST API, no auth). 200 = taken, 404 = free. No proxy needed — extremely reliable.
- **Snapchat** — new platform `snapchat` and column `available_snapchat`. Uses `story.snapchat.com/@{handle}` (static CDN page). 200 = taken, 404 = free. No proxy needed.
- **Twitch** — new platform `twitch` and column `available_twitch`. Uses `twitch.tv/{handle}` page title heuristic: `"{name} - Twitch"` = taken, `"Twitch"` alone = free. No auth or proxy needed (Helix API requires OAuth).

### 1.6.4 — 2026-07-05

#### Fixed

- **Instagram TLS fingerprint detection** — replaced session pool + warmup with `got-scraping` (Chrome JA3/TLS fingerprint). Instagram no longer blocks requests from Apify's cloud.
- **HTTP 401 on private accounts** — now correctly treated as "taken" instead of "error".
- **HTTP 590 (proxy upstream timeout)** — added retry with a fresh residential IP on proxy-level errors.
- **Internal Apify proxy blocked by Instagram** — switched from internal endpoint (`10.0.x.x:8011`) to external (`proxy.apify.com:8000`).

#### Changed

- **Removed Instagram session pool** (`getInstagramTokens`, `instagramSessions`, `getInstagramSession`) — `web_profile_info` needs no CSRF/cookies. Eliminates 5–20 warmup requests per run (~8s startup saving on Apify).
- **1 dedicated residential IP per handle** — unique `sessionId` per handle + run timestamp. Zero IP reuse across handles.
- **Endpoint**: `i.instagram.com` → `www.instagram.com` (internal proxy doesn't reach `i.instagram.com`).
- **Pricing**: degressive plan discounts — $10/1k (Free), $8.70 (Starter), $7.50 (Scale), $6.20 (Business) per 1,000 results.

### 1.6

#### Added

- **Threads** — new platform `threads` and column `available_threads`. Uses Instagram’s public `web_profile_info` endpoint (same **@username** as Threads for Meta accounts). On Apify Cloud, requests use the **residential** proxy like other Meta checks. Dependency: **`got-scraping`** (avoids undici Sec-Fetch errors on `i.instagram.com`).

### 1.5

#### Changed

- **Input (Console):** Removed the **Advanced (Instagram)** section (`instagramCookies`, `proxyGroups`) from `input_schema.json` so the default UI only shows handles and platforms. The Actor still accepts those keys via the **API**; Instagram continues to use the **RESIDENTIAL** proxy group by default on Apify.
- **Input copy:** Simpler English descriptions for the Actor form (no bulk-edit / JSON paste instructions).

### 1.4

#### Fixed

- **Pinterest:** Availability no longer uses the profile HTML shell (`profile` / `PinCount` appear in every page’s JS). Detection uses the public **`/feed.rss`** endpoint first: HTTP **200** + RSS XML means the username exists; **404** + `User not found` means it is available. HTML remains a narrow fallback.

### 1.3

#### Changed

- Run logs: removed emoji and Unicode banner characters; ASCII separators and plain indented lines only (aligned with **perfect-apify-actor** premium logging guidance).

### 1.2.1

#### Changed

- **Logs:** Progress bar + % + step counter + ETA (aligned with facebook-ads-library-scraper), shorter plain-English lines; `Actor.setStatusMessage` shows `% · step/total` on Apify. Removed long per-network lines from the live log.

### 1.2.0

#### Removed

- **LinkedIn** — public `/in/{slug}` is not aligned with a cross-network “vanity handle” check; column `available_linkedin` and all LinkedIn logic removed.

### 1.1.2

#### Fixed

- **X (Twitter):** Availability via **oEmbed** (`publish.twitter.com`) instead of `x.com` HTML; minimal `curl`-style `User-Agent` avoids Cloudflare **403** on server-side `fetch`.

### 1.1.1

#### Fixed

- **Facebook:** Chrome-like `Sec-*` / `Sec-Ch-Ua*` headers, multiple URL attempts (`www` + `m.facebook.com`), parse HTML before failing on HTTP 400.
- **Facebook (cloud):** Residential proxy for HTTP checks to reduce HTTP 400 blocks from datacenter egress.

#### Added

- Structured English logging (`src/lib/runLogger.js`): section banners, `Mode:` phase lines, 3-space indented lines per **perfect-apify-actor**.
- `RUN_LOG` key-value record (flush every 15 lines, cap 2000 lines) + Console link in `output_schema.json`.
- `Actor.setStatusMessage` on Apify (throttled progress + terminal “Done” line).
- `.apifyignore` for leaner `apify push` bundles.

### 1.1.0

- Added HTTP-based availability checks for Facebook, Pinterest, YouTube (`@handle`), and X (Twitter).
- Split Actor config: `input_schema.json`, `output_schema.json`, `dataset_schema.json`, `key_value_store_schema.json`.
- Default platforms: all seven plus existing Instagram and TikTok.
- Bumped default memory and optional run timeout; dataset schema extended with new columns.

### 1.0.0

- Initial release: Instagram (web signup API) and TikTok (profile page) checks, parallel processing, residential proxy pool for Instagram.
