Skip to content

Commit 56c4c8e

Browse files
author
UnitBytes
committed
feat: add interactive Google Colab notebook, RapidAPI/Zyla badges & v1.1.0 release
1 parent a5d2011 commit 56c4c8e

4 files changed

Lines changed: 276 additions & 12 deletions

File tree

‎.github/RELEASE_NOTES.md‎

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
### 🚀 v1.1.0 Release Notes — 🤖 Reddit Scraper API Suite: Subreddits, Search, Posts & Nested Comments (`$1 / 1K`)
2+
3+
The fastest zero-login Reddit Scraper API suite on Apify (`$1 / 1,000 items`) and synchronous REST API (`<500ms` GET on RapidAPI Hub & Zyla API Hub). Extract subreddit feeds, 5-tab keyword brand mentions, posts, user profiles, and deep nested comment trees to JSON, CSV, Python, Colab, or n8n.
4+
5+
- 📓 **1-Click Interactive Google Colab Notebook:** [**Open `notebooks/quickstart.ipynb` in Colab**](https://colab.research.google.com/github/unitbytes/Reddit-Scraper-API/blob/main/notebooks/quickstart.ipynb)
6+
- ⚡ **Synchronous REST API on RapidAPI Hub (`<500ms` GET, Free Tier):** [https://rapidapi.com/unitbytes/api/reddit-community-post-comment-search-data-api](https://rapidapi.com/unitbytes/api/reddit-community-post-comment-search-data-api)
7+
- ⚡ **Synchronous REST API on Zyla API Hub (7-Day Free Trial):** [https://zylalabs.com/api-marketplace/social+media+%26+networking/reddit+community+post+comment+and+search+data+api/14529](https://zylalabs.com/api-marketplace/social+media+%26+networking/reddit+community+post+comment+and+search+data+api/14529)
8+
- 🤖 **AI Coding Agent MCP Ready:** Includes `.cursor/mcp.json` for Cursor, Windsurf, and Claude Code.
9+
- 🔧 **9-Node n8n Automation Workflows:** Ready-to-import `.json` templates under `n8n/` and at **[unitbytes.com/n8n](https://unitbytes.com/n8n/)**.
10+
11+
## 🛠️ Included Extraction Engines & SDK Quickstarts
12+
13+
| Extraction Engine | Pricing (PPE) | Python SDK & n8n Template | Cloud Console & Docs |
14+
| :--- | :---: | :--- | :---: |
15+
| **Reddit Scraper & Media API: Posts, Users & Comments** | `$0.001 / item` | [`examples/run_reddit_scraper.py`](https://github.com/unitbytes/Reddit-Scraper-API/blob/main/examples/run_reddit_scraper.py) · [`n8n/reddit-scraper-n8n-workflow.json`](https://github.com/unitbytes/Reddit-Scraper-API/blob/main/n8n/reddit-scraper-n8n-workflow.json) | [⚡ **Run on Apify**](https://apify.com/unitbytes/reddit-scraper?fpr=939u3w&fp_sid=gh_reddit_rel) · [Schema](https://unitbytes.com/actors/reddit-scraper/) |
16+
| **Reddit Search Scraper: Brand Monitoring & B2B Leads** | `$0.001 / item` | [`examples/run_reddit_search_scraper.py`](https://github.com/unitbytes/Reddit-Scraper-API/blob/main/examples/run_reddit_search_scraper.py) · [`n8n/reddit-search-scraper-n8n-workflow.json`](https://github.com/unitbytes/Reddit-Scraper-API/blob/main/n8n/reddit-search-scraper-n8n-workflow.json) | [⚡ **Run on Apify**](https://apify.com/unitbytes/reddit-search-scraper?fpr=939u3w&fp_sid=gh_reddit_rel) · [Schema](https://unitbytes.com/actors/reddit-search-scraper/) |
17+
| **Reddit Comments Scraper: Comment Trees, Replies & Sentiment** | `$0.001 / item` | [`examples/run_reddit_comments_scraper.py`](https://github.com/unitbytes/Reddit-Scraper-API/blob/main/examples/run_reddit_comments_scraper.py) · [`n8n/reddit-comments-scraper-n8n-workflow.json`](https://github.com/unitbytes/Reddit-Scraper-API/blob/main/n8n/reddit-comments-scraper-n8n-workflow.json) | [⚡ **Run on Apify**](https://apify.com/unitbytes/reddit-comments-scraper?fpr=939u3w&fp_sid=gh_reddit_rel) · [Schema](https://unitbytes.com/actors/reddit-comments-scraper/) |
18+
| **Reddit Subreddit Scraper: Hot Posts & Subreddits** | `$0.001 / item` | [`examples/run_reddit_subreddits_scraper.py`](https://github.com/unitbytes/Reddit-Scraper-API/blob/main/examples/run_reddit_subreddits_scraper.py) · [`n8n/reddit-subreddits-scraper-n8n-workflow.json`](https://github.com/unitbytes/Reddit-Scraper-API/blob/main/n8n/reddit-subreddits-scraper-n8n-workflow.json) | [⚡ **Run on Apify**](https://apify.com/unitbytes/reddit-subreddits-scraper?fpr=939u3w&fp_sid=gh_reddit_rel) · [Schema](https://unitbytes.com/actors/reddit-subreddits-scraper/) |
19+
20+
## ⚡ Pre-Configured 1-Click Task Presets
21+
22+
| Task Preset | Target Use Case | Direct Cloud Launch |
23+
| :--- | :--- | :---: |
24+
| **Scrape Reddit Subreddits, Threads & Nested Comments (All-in-One)** | Extract hot, top, or rising posts and full comment trees across any Reddit community without Reddit API OAuth keys or rate limits. | [⚡ Run Task Preset](https://apify.com/unitbytes/reddit-scraper?fpr=939u3w&fp_sid=gh_reddit_rel) |
25+
| **Monitor Reddit for High-Intent B2B Buying Signals & Competitor Mentions** | Search all of Reddit or specific subreddits for 'alternative to', 'best tool for', and competitor pain points to capture high-intent leads. | [⚡ Run Task Preset](https://apify.com/unitbytes/reddit-search-scraper?fpr=939u3w&fp_sid=gh_reddit_rel) |
26+
| **Extract Deep Reddit Comment Trees for AI RAG & Sentiment Analysis** | Unroll complete multi-level Reddit discussion threads with parentId hierarchy, upvote scores, and author flair for LLM training and VoC research. | [⚡ Run Task Preset](https://apify.com/unitbytes/reddit-comments-scraper?fpr=939u3w&fp_sid=gh_reddit_rel) |
27+
| **Track Subreddit Community Feeds & Top Weekly Posts** | Bulk-monitor multiple subreddits by hot, new, top, or rising sort modes with subscriber metadata, flair tags, and permanent media URLs. | [⚡ Run Task Preset](https://apify.com/unitbytes/reddit-subreddits-scraper?fpr=939u3w&fp_sid=gh_reddit_rel) |
28+
29+
---
30+
31+
### 🛡️ Core Engineering Guarantees
32+
- **Zero Login or Cookies Required:** Operates 100% anonymously without personal accounts or session tokens.
33+
- **Clean Flat Schemas:** Export directly to Excel, CSV, Google Sheets, Pandas, or AI agents with zero `[object Object]` nesting errors.
34+
- **Permanent Media CDNs:** High-resolution image and video links that never expire or return 403 Forbidden.
35+
- **Enterprise Support & Custom Feeds:** [contact@unitbytes.com](mailto:contact@unitbytes.com) • [https://unitbytes.com](https://unitbytes.com)

‎.github/workflows/release.yml‎

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
name: Verify SDK & Publish Release
2+
3+
on:
4+
push:
5+
branches: [main]
6+
tags: ["v*"]
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: write
11+
12+
jobs:
13+
verify-and-release:
14+
runs-on: ubuntu-latest
15+
steps:
16+
- name: Checkout repository
17+
uses: actions/checkout@v4
18+
19+
- name: Verify Python SDK scripts & JSON schemas
20+
run: |
21+
python3 -m py_compile examples/*.py
22+
python3 -c 'import glob, json; [json.load(open(f)) for f in glob.glob("n8n/*.json") + glob.glob("samples/*.json") + glob.glob("notebooks/*.ipynb")]'
23+
24+
- name: Build starter-kit release bundle (unitbytes-reddit-scraper-api-starter-kit.zip)
25+
run: |
26+
zip -r "unitbytes-reddit-scraper-api-starter-kit.zip" README.md requirements.txt LICENSE SECURITY.md examples/ notebooks/ n8n/ samples/
27+
28+
- name: Sync clean v1.0.0 & v1.1.0 GitHub Releases
29+
env:
30+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
31+
REPO_FULL: ${{ github.repository }}
32+
TITLE_CLEAN: "🤖 Reddit Scraper API Suite: Subreddits, Search, Posts & Nested Comments (`$1 / 1K`)"
33+
ZIP_NAME: "unitbytes-reddit-scraper-api-starter-kit.zip"
34+
run: |
35+
python3 - << 'PYEOF'
36+
import json, os, subprocess, urllib.request
37+
38+
token = os.environ["GH_TOKEN"]
39+
repo = os.environ["REPO_FULL"]
40+
title_clean = os.environ["TITLE_CLEAN"]
41+
zip_name = os.environ["ZIP_NAME"]
42+
notes_v110 = open(".github/RELEASE_NOTES.md", "r", encoding="utf-8").read()
43+
notes_v100 = notes_v110.replace("v1.1.0 Release Notes", "v1.0.0 Release Notes", 1)
44+
45+
def gh_api(method, path, payload=None):
46+
url = f"https://api.github.com{path}"
47+
headers = {
48+
"Accept": "application/vnd.github+json",
49+
"Authorization": f"Bearer {token}",
50+
"X-GitHub-Api-Version": "2022-11-28",
51+
"User-Agent": "unitbytes-release-bot",
52+
}
53+
data = None
54+
if payload is not None:
55+
data = json.dumps(payload).encode("utf-8")
56+
headers["Content-Type"] = "application/json"
57+
req = urllib.request.Request(url, data=data, headers=headers, method=method)
58+
with urllib.request.urlopen(req, timeout=30) as r:
59+
b = r.read().decode("utf-8")
60+
return json.loads(b) if b else {}
61+
62+
rels = gh_api("GET", f"/repos/{repo}/releases")
63+
by_tag = {r["tag_name"]: r for r in rels}
64+
65+
if "v1.0.0" in by_tag:
66+
r100 = by_tag["v1.0.0"]
67+
gh_api("PATCH", f"/repos/{repo}/releases/{r100['id']}", {
68+
"name": f"UnitBytes {title_clean} — v1.0.0 Release",
69+
"body": notes_v100,
70+
})
71+
72+
rel_name_110 = f"UnitBytes {title_clean} — v1.1.0 (Colab, MCP, RapidAPI/Zyla & 9-Node n8n Suite)"
73+
if "v1.1.0" in by_tag:
74+
r110 = by_tag["v1.1.0"]
75+
gh_api("PATCH", f"/repos/{repo}/releases/{r110['id']}", {
76+
"name": rel_name_110,
77+
"body": notes_v110,
78+
"draft": False,
79+
"prerelease": False,
80+
"make_latest": "true",
81+
})
82+
else:
83+
gh_api("POST", f"/repos/{repo}/releases", {
84+
"tag_name": "v1.1.0",
85+
"target_commitish": "main",
86+
"name": rel_name_110,
87+
"body": notes_v110,
88+
"draft": False,
89+
"prerelease": False,
90+
"make_latest": "true",
91+
})
92+
93+
subprocess.run(["gh", "release", "upload", "v1.1.0", zip_name, "--clobber", "--repo", repo], check=True)
94+
PYEOF

0 commit comments

Comments
 (0)