seo-content-writer
Scrape the live Google SERP for a search term via SearchApi, read the actual top-ranking pages, then plan and write a humanised, ready-to- publish markdown article engineered to rank against what's currently on page 1. Use when the user says "write an article about", "write a blog post", "write c...
Install this skill
or
66/100
Security score
The seo-content-writer skill was audited on Aug 6, 2026 and we found 8 security issues across 3 threat categories, including 1 high-severity. Review the findings below before installing.
Categories Tested
Security Issues
low line 144
Command substitution pattern
SourceSKILL.md
| 142 | |
| 143 | ```bash |
| 144 | STATUS=$(printf '%s' "$RESP" | jq -r '.search_metadata.status // "unknown"') |
| 145 | if [ "$STATUS" != "Success" ]; then |
| 146 | echo "SearchApi error: $(printf '%s' "$RESP" | jq -r '.error // .search_metadata.status')"; exit 1 |
low line 146
Command substitution pattern
SourceSKILL.md
| 144 | STATUS=$(printf '%s' "$RESP" | jq -r '.search_metadata.status // "unknown"') |
| 145 | if [ "$STATUS" != "Success" ]; then |
| 146 | echo "SearchApi error: $(printf '%s' "$RESP" | jq -r '.error // .search_metadata.status')"; exit 1 |
| 147 | fi |
| 148 | COUNT=$(printf '%s' "$RESP" | jq '.organic_results | length') |
low line 148
Command substitution pattern
SourceSKILL.md
| 146 | echo "SearchApi error: $(printf '%s' "$RESP" | jq -r '.error // .search_metadata.status')"; exit 1 |
| 147 | fi |
| 148 | COUNT=$(printf '%s' "$RESP" | jq '.organic_results | length') |
| 149 | if [ "$COUNT" -eq 0 ]; then echo "Empty SERP. Check keyword, gl, hl."; exit 1; fi |
| 150 | ``` |
low line 160
Command substitution pattern
SourceSKILL.md
| 158 | ```bash |
| 159 | KEYWORD="best serp api" |
| 160 | SLUG="$(echo "$KEYWORD" | tr '[:upper:] /' '[:lower:]__' | tr -cd '[:alnum:]_-')" |
| 161 | RUN_DIR=".seo-content-writer/$SLUG" |
| 162 | mkdir -p "$RUN_DIR/raw" |
medium line 119
Curl to non-GitHub URL
SourceSKILL.md
| 117 | |
| 118 | ```bash |
| 119 | curl -sG "https://www.searchapi.io/api/v1/search" \ |
| 120 | --data-urlencode "engine=google" \ |
| 121 | --data-urlencode "q=$KEYWORD" \ |
medium line 201
Curl to non-GitHub URL
SourceSKILL.md
| 199 | ```bash |
| 200 | # Autocomplete: subtopic + long-tail mining (always useful, separate call) |
| 201 | curl -sG "https://www.searchapi.io/api/v1/search" \ |
| 202 | --data-urlencode "engine=google_autocomplete" \ |
| 203 | --data-urlencode "q=$KEYWORD" --data-urlencode "client=chrome" \ |
medium line 209
Curl to non-GitHub URL
SourceSKILL.md
| 207 | |
| 208 | # AI Overview body: ONLY when step 4 returned a token instead of the inline block |
| 209 | [ -n "$AIO_TOKEN" ] && curl -sG "https://www.searchapi.io/api/v1/search" \ |
| 210 | --data-urlencode "engine=google_ai_overview" \ |
| 211 | --data-urlencode "page_token=$AIO_TOKEN" \ |
high line 40
Urgency-based manipulation
SourceSKILL.md
| 38 | # seo-content-writer: a SERP-informed article, built to rank, written like a human |
| 39 | |
| 40 | Give this skill one search term and it returns one ready-to-publish markdown article, engineered to compete with whatever is on page 1 right now and written to read like a person wrote it. It runs in three confirmed stages: (1) you define the keyword and the angle; (2) the skill fetches the live Google SERP via SearchApi, reads the actual top-ranking pages with `WebFetch`, and proposes a content plan and outline for you to confirm; (3) once you confirm, it writes the full draft, humanises it inline against a baked-in checklist (no em dashes, no AI tells), and runs two fact-checking subagents (one for claims, one for statistics) before saving. |
| 41 | |
| 42 | The only deliverable is one `.md` file. Raw SERP and competitor snapshots are persisted to a working dir during the run so an interrupted run leaves usable research on disk, but they are not the deliverable. |
Scanned on Aug 6, 2026
View Security Dashboard