Reverse-engineer what a company is building by scraping their job postings, careers page, LinkedIn Jobs, and engineering blog using TinyFish web agents.
Install the "company-hiring-intelligence" agent skill from https://github.com/tinyfish-io/tinyfish-cookbook/tree/main/skills/company-hiring-intel into .claude/skills/company-hiring-intelligence/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "company-hiring-intelligence", then confirm the skill loads.
Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Type this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
skills CLI
$ npx skills add tinyfish-io/tinyfish-cookbook --skill company-hiring-intelligence -a codex
Project install goes to .agents/skills/; add -g for ~/.codex/skills/.
Install the "company-hiring-intelligence" agent skill from https://github.com/tinyfish-io/tinyfish-cookbook/tree/main/skills/company-hiring-intel into .agents/skills/company-hiring-intelligence/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "company-hiring-intelligence", then confirm the skill loads.
Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add tinyfish-io/tinyfish-cookbook --skill company-hiring-intelligence -a cursor
Project install goes to .agents/skills/; add -g for ~/.cursor/skills/.
Install the "company-hiring-intelligence" agent skill from https://github.com/tinyfish-io/tinyfish-cookbook/tree/main/skills/company-hiring-intel into .cursor/skills/company-hiring-intelligence/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "company-hiring-intelligence", then confirm the skill loads.
Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
skills CLI
$ npx skills add tinyfish-io/tinyfish-cookbook --skill company-hiring-intelligence -a gemini-cli
Project install goes to .agents/skills/; add -g for ~/.gemini/skills/.
Install the "company-hiring-intelligence" agent skill from https://github.com/tinyfish-io/tinyfish-cookbook/tree/main/skills/company-hiring-intel into .gemini/skills/company-hiring-intelligence/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "company-hiring-intelligence", then confirm the skill loads.
Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Installs for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
skills CLI
$ npx skills add tinyfish-io/tinyfish-cookbook --skill company-hiring-intelligence -a github-copilot
Project install goes to .agents/skills/; add -g for ~/.copilot/skills/.
Install the "company-hiring-intelligence" agent skill from https://github.com/tinyfish-io/tinyfish-cookbook/tree/main/skills/company-hiring-intel into .github/skills/company-hiring-intelligence/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "company-hiring-intelligence", then confirm the skill loads.
GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
skills CLI
$ npx skills add tinyfish-io/tinyfish-cookbook --skill company-hiring-intelligence -a opencode
OpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
Install the "company-hiring-intelligence" agent skill from https://github.com/tinyfish-io/tinyfish-cookbook/tree/main/skills/company-hiring-intel into .opencode/skills/company-hiring-intelligence/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "company-hiring-intelligence", then confirm the skill loads.
OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
Facts
Skill name
company-hiring-intelligence
GitHub stars
2.2k
Token cost
~3.6k tokens
SKILL.md length
1,067 words
Files
1
Skills in repo
28
Repo updated
First seen
Licence
MIT
At a glance
Reverse-engineer what a company is building by scraping their job postings, careers page, LinkedIn Jobs, and engineering blog using TinyFish web agents.
Works in 4 steps: Resolve the URLs → Scrape the Careers Page → Scrape LinkedIn Jobs → …
A user wants to understand a companys strategic direction from hiring signals
SKILL.md covers Pre-flight Check (REQUIRED), What This Skill Does, Core Command and Step-by-Step Workflow, plus 7 more sections
Calls npm; reaches linkedin.com and notion.so; needs TINYFISH_API_KEY
What it does
Company Hiring Intelligence is an agent skill from tinyfish-io/tinyfish-cookbook. Reverse-engineer what a company is building by scraping their job postings, careers page, LinkedIn Jobs, and engineering blog using TinyFish web agents. Use whenever a user wants to understand a company's strategic direction from hiring signals, do competitive intelligence, figure out a tech stack from job descriptions, or evaluate whether a company is worth joining. Trigger on "what is [company] building", "what is [company] hiring for", "competitive intelligence", "[company] jobs", "should I join [company]"…
Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Business, Finance & HR, covering Recruiting and HR, Web scraping and Competitor analysis. It works with LinkedIn, Bash and PowerShell. The repository describes itself as: A collection of sample apps and recipes built with the TinyFish web agent. Open-source examples for you to learn & build! The licence is MIT.
When your agent uses it
A user wants to understand a companys strategic direction from hiring signals
Do competitive intelligence
Figure out a tech stack from job descriptions
Evaluate whether a company is worth joining
Example prompts
“what is [company] building”
“what is [company] hiring for”
“competitive intelligence”
“/company-hiring-intelligence”
Requirements
Node.js
A credential in TINYFISH_API_KEY
Workflow steps
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 63cd841. It shows what the files ask for, not the result of running them.
Tool permissions
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Runs code
Shell commands in SKILL.md call:
npm
From the folder's file list and the shell code blocks in SKILL.md.
Network
Hosts in commands or code, which the agent is likely to contact:
linkedin.com
notion.so
Also links to:
agent.tinyfish.ai
From URLs in SKILL.md, links to its own repository left out.
Credentials
Names these keys or tokens, usually read from environment variables:
TINYFISH_API_KEY
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Context cost
Company Hiring Intelligence loads about 3.6k tokens when it runs. Until then it costs about 218 tokens; SKILL.md has 1,067 words of instructions outside code blocks.
Always· name and description, kept in context so the agent knows when to use it
~218
When it runs· the whole SKILL.md, loaded when a task matches
~3.6k
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
Safety
Auto-check passed
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
Download SKILL.mdSave it as .claude/skills/company-hiring-intelligence/SKILL.md (or your agent's skills folder).
name
company-hiring-intelligence
description
Reverse-engineer what a company is building by scraping their job postings, careers page, LinkedIn Jobs, and engineering blog using TinyFish web agents. Use whenever a user wants to understand a company's strategic direction from hiring signals, do competitive intelligence, figure out a tech stack from job descriptions, or evaluate whether a company is worth joining. Trigger on "what is [company] building", "what is [company] hiring for", "competitive intelligence", "[company] jobs", "should I join [company]", "hiring signals", "what teams are growing", "reverse engineer roadmap", or any request to understand a company's direction from public hiring activity. Always use this skill for company intelligence rather than guessing from memory. Also trigger when someone names a company and asks about strategy, tech stack, or org structure.
Company Hiring Intelligence — Reverse-Engineer What a Company Is Building From Their Job Postings
You have access to the TinyFish CLI (tinyfish), a tool that runs browser automations from the terminal using natural language goals. This skill uses it to scrape a company's careers page, LinkedIn Jobs, and engineering blog in parallel, then synthesizes the raw hiring data into a strategic intelligence report.
A company quietly posting eight ML infra roles and two vector database engineers is telling you something. This skill reads those signals.
Pre-flight Check (REQUIRED)
Before making any TinyFish call, always run BOTH checks:
1. CLI installed?
PowerShell:
powershell
Get-Command tinyfish; tinyfish --version
bash/zsh:
bash
which tinyfish && tinyfish --version || echo "TINYFISH_CLI_NOT_INSTALLED"
If not installed, stop and tell the user:
Install the TinyFish CLI: npm install -g @tiny-fish/cli
Given a company name (e.g. "Notion" or "Mistral AI"), this skill:
Scrapes the company careers page for all open roles — titles, teams, locations, and posting dates
Scrapes LinkedIn Jobs for the same company to cross-reference postings and surface duplicates or long-unfilled roles
Scrapes the company's engineering blog (if one exists) for recent technical posts that signal architectural direction
It then synthesizes all three into a structured intelligence report: which bets the company is making, which problems they haven't solved yet (chronic open roles), and which technologies are becoming load-bearing.
Core Command
bash
tinyfish agent run --sync --url <url> "<goal>"
Key Flags
Flag
Purpose
--url <url>
Target URL to navigate to
--sync
Block until result is complete (required here — you need all data before synthesizing)
--pretty
Human-readable output for debugging
Step-by-Step Workflow
Step 0 — Resolve the URLs
Before running agents, determine the three target URLs for the company:
Source
How to find it
Careers page
Usually <company>.com/careers or <company>.com/jobs. If unclear, search "<company name>" careers site:company.com first.
LinkedIn Jobs
Always: https://www.linkedin.com/jobs/search/?keywords=<company+name>&f_C=<company_id> — or simpler: https://www.linkedin.com/company/<company-slug>/jobs/
Engineering blog
Common patterns: eng.<company>.com, <company>.com/blog/engineering, <company>.tech, or search "<company name>" engineering blog
If you cannot confidently resolve a URL, run a quick web search before proceeding. Do not guess.
Step 1 — Scrape the Careers Page
bash
tinyfish agent run --sync \
--url "<company_careers_url>" \
"Extract all visible job postings as JSON. For each role include: {\"title\": str, \"team\": str, \"location\": str, \"posted_date\": str, \"url\": str}. If pagination exists, navigate through all pages and collect every role before returning."
Example for Notion:
bash
tinyfish agent run --sync \
--url "https://www.notion.so/careers" \
"Extract all visible job postings as JSON. For each role include: {\"title\": str, \"team\": str, \"location\": str, \"posted_date\": str, \"url\": str}. Navigate through all pages and collect every role."
Step 2 — Scrape LinkedIn Jobs
bash
tinyfish agent run --sync \
--url "https://www.linkedin.com/company/<company-slug>/jobs/" \
"Extract the top 25 job postings as JSON: [{\"title\": str, \"location\": str, \"posted_date\": str, \"seniority_level\": str, \"employment_type\": str, \"url\": str}]. If you encounter a login prompt, scroll past it or dismiss it and continue scraping the visible listings."
Why LinkedIn matters: LinkedIn shows posted_date more reliably and surfaces roles that have been reposted — a role listed as "Posted 3 weeks ago" that you saw listed on the careers page as "Posted 6 months ago" is a chronic open role, which signals either a hard-to-fill skill set or a team under construction.
Step 3 — Scrape the Engineering Blog
bash
tinyfish agent run --sync \
--url "<engineering_blog_url>" \
"Extract the 10 most recent blog posts as JSON: [{\"title\": str, \"author\": str, \"published_date\": str, \"url\": str, \"summary\": str (one sentence describing the technical topic)}]. Focus only on engineering or technical posts; skip product announcements or company news."
If no engineering blog exists, skip this step and note it in the report.
Parallel Execution
All three sources are independent — run them simultaneously. Do NOT wait for one to finish before starting the next.
bash/zsh — Parallel execution:
bash
# Fire all three simultaneously
tinyfish agent run --sync \
--url "<careers_url>" \
"Extract all job postings as JSON: [{\"title\": str, \"team\": str, \"location\": str, \"posted_date\": str, \"url\": str}]" \
> /tmp/careers_results.json &
tinyfish agent run --sync \
--url "https://www.linkedin.com/company/<slug>/jobs/" \
"Extract top 25 job postings as JSON: [{\"title\": str, \"location\": str, \"posted_date\": str, \"seniority_level\": str, \"url\": str}]" \
> /tmp/linkedin_results.json &
tinyfish agent run --sync \
--url "<eng_blog_url>" \
"Extract the 10 most recent engineering posts as JSON: [{\"title\": str, \"published_date\": str, \"url\": str, \"summary\": str}]" \
> /tmp/blog_results.json &
wait # Block until all three finish
cat /tmp/careers_results.json /tmp/linkedin_results.json /tmp/blog_results.json
Step 4 — Extract Hiring Patterns Before Synthesizing
Before writing the report, run these four analyses against the raw JSON data. These are the signal extraction steps — the report is only as good as what you pull out here.
4a — Team Velocity (which teams are growing fastest?)
Group all roles by team field. Count roles per team. Rank by count descending. Teams with 4+ open roles are in active build-out.
Show full SKILL.md (486 more words)Show less
4b — Technology Frequency (what tech keeps appearing in titles and descriptions?)
Scan all role titles for technology keywords: language names, frameworks, infrastructure tools, data systems, ML/AI terms. Count occurrences. Any technology appearing in 3+ role titles is becoming load-bearing.
Common signals to watch for:
Signal
What it likely means
3+ "ML Platform" or "ML Infra" roles
Building internal model training/serving infrastructure
2+ "Vector DB" or "Embeddings" engineers
RAG pipeline or semantic search product in progress
Compliance push (SOC2, FedRAMP) or post-breach response
Repeated "Growth Engineer" roles
Performance marketing or activation loop under construction
4c — Chronic Open Roles (what can't they hire for?)
Cross-reference careers page posted_date with LinkedIn posted_date for the same role. Roles posted 60+ days ago that appear on both sources without a "filled" status are chronic opens. List them explicitly — they represent either a rare skill set or an organizational problem.
4d — Engineering Blog Themes (what are their engineers thinking about?)
Group blog posts by technical theme. Themes appearing in 2+ recent posts indicate active investment. Compare to job postings — if the blog is full of posts about distributed systems and the jobs board has five "Distributed Systems Engineer" openings, that's a confirmed strategic bet.
Step 5 — Synthesize the Intelligence Report
Use the outputs of Steps 1–4 to produce this report. Only use data from TinyFish results. Do not speculate beyond what the signals support.
## Hiring Intelligence Report: <Company Name>
Report generated: <date>
Sources: Careers page · LinkedIn Jobs · Engineering blog
---
### The 30-Second Read
<2–3 sentences. What is this company clearly building right now, based purely on where they are hiring?>
---
### Team Velocity — Where They Are Growing
| Team | Open Roles | Signal |
|------|-----------|--------|
| <team> | <count> | <what this growth suggests> |
| ... | | |
---
### Technology Bets — What Keeps Showing Up in Job Descriptions
- **<Technology>** — appears in <N> role titles. Teams: <list>. Interpretation: <what this suggests>
- ...
---
### Chronic Open Roles — What They Can't Hire For
- **<Role Title>** — posted <X> days ago, still open. Possible reason: <rare skill set / team restructuring / high bar>
- ...
(If no chronic roles found, note that hiring velocity appears healthy.)
---
### Engineering Blog Signals
- **<Theme>** — <N> recent posts. Most recent: "<title>" (<date>). Cross-reference: <matching job postings if any>
- ...
(If no engineering blog found, note its absence — some companies go dark on purpose before a launch.)
---
### Strategic Interpretation
<3–5 sentences. What is the company's likely 12-month technical roadmap based on these signals? Be specific: name the product bets, the infrastructure they're building, the problems they haven't solved yet.>
---
### Red Flags (if any)
- <anything anomalous: mass hiring freeze signals, executive role churn, repeated re-posts of the same role, entire teams missing from job board>
---
### For the Founder
<2–3 sentences of competitive intelligence framing: what this company is about to be able to do that they can't do today, and what window that creates or closes.>
### For the Engineer Evaluating a Job Offer
<2–3 sentences: is this company in early build-out, scaling a working system, or in maintenance mode? What does that mean for the work you'd actually be doing?>
Handling Blocked or Login-Walled Pages
Some sources will resist scraping. Use these fallbacks:
Source
Common block
Fallback
LinkedIn
Login wall
In the TinyFish goal, add: "If a login prompt appears, dismiss it or scroll past it. Scrape whatever is visible without logging in." LinkedIn shows ~10–15 roles to unauthenticated users — enough for signal.
Careers page
JavaScript-heavy SPA that loads slowly
Add to goal: "Wait for the full page to load before extracting. If roles load lazily on scroll, scroll to the bottom of the page first."
Engineering blog
Paywall or subscription gate
Skip and note in the report.
If a source returns zero results after retry, note it explicitly in the report rather than omitting the section. Absence of data is itself a signal.
Keyword Variants for Ambiguous Company Names
If the company name is common or shared (e.g. "Linear", "Notion", "Scale"), disambiguate in the LinkedIn search URL using the company slug, not just the name.
Company
LinkedIn slug
Notion
notion
Linear
linear-app
Scale AI
scaleai
Mistral AI
mistral-ai
Find the correct slug by visiting linkedin.com/company/<slug> and checking the company page resolves correctly before running the agent.
Managing Runs
bash
# List recent runs
tinyfish agent run list
# Retrieve a completed run by ID
tinyfish agent run get <run_id>
# Cancel a hung run
tinyfish agent run cancel <run_id>
Output Format
The CLI streams data: {...} SSE lines. The final usable result is the event where type == "COMPLETE" and status == "COMPLETED" — extracted data lives in resultJson. Read raw output directly; no additional parsing is needed unless you are piping results between steps.
Company Hiring Intelligence next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
Company Hiring Intelligence compared with similar skills
Skill
Stars
Used in
Tokens
Auto-check
Licence
Repo updated
Company Hiring Intelligence this skilltinyfish-io/tinyfish-cookbook
Scrapes public data from social, maps, search and review platforms by choosing from about a hundred Apify Actors and running them through the Apify CLI.
Set up a recurring buying-signal detection pipeline that finds companies showing buying intent across three signal types — job postings (hiring for the persona), fundraising events (recent raises)…
Extracts business contact details from Google Maps search results and place detail pages, then visits each business website to collect emails, phone numbers, and social media profiles (Facebook…
Default browser automation agent — click, fill forms, navigate, log in, and extract structured data from any website using a natural-language goal, or run the same task across multiple sites in…
Check every dependency in a package.json against live CVE databases and security advisories in real time — specifically targeting vulnerabilities disclosed in the last 48 hours, the window that…
Scrape real developer pain points for any keyword, technology, or problem space from Reddit, Hacker News, dev.to, and GitHub Discussions simultaneously — then group complaints by theme, score them…
Reverse-engineer what a company is building by scraping their job postings, careers page, LinkedIn Jobs, and engineering blog using TinyFish web agents. Company Hiring Intelligence is an agent skill from tinyfish-io/tinyfish-cookbook. Reverse-engineer what a company is building by scraping their job postings, careers page, LinkedIn Jobs, and engineering blog using TinyFish web agents.
When should I use Company Hiring Intelligence?
Company Hiring Intelligence fits situations like: A user wants to understand a companys strategic direction from hiring signals; do competitive intelligence; figure out a tech stack from job descriptions; evaluate whether a company is worth joining.
How do I install Company Hiring Intelligence in Claude Code?
Run `npx skills add tinyfish-io/tinyfish-cookbook --skill company-hiring-intelligence -a claude-code`. Or copy the skill folder (skills/company-hiring-intel in tinyfish-io/tinyfish-cookbook) into .claude/skills/company-hiring-intelligence in your project. Claude Code loads it when a task matches its description.
How do I install Company Hiring Intelligence in Codex?
Run `npx skills add tinyfish-io/tinyfish-cookbook --skill company-hiring-intelligence -a codex`. Or copy the skill folder (skills/company-hiring-intel in tinyfish-io/tinyfish-cookbook) into .agents/skills/company-hiring-intelligence in your project. Codex loads it when a task matches its description.
Can I use Company Hiring Intelligence in Cursor, Gemini CLI or GitHub Copilot?
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add tinyfish-io/tinyfish-cookbook --skill company-hiring-intelligence -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/company-hiring-intelligence, .gemini/skills/company-hiring-intelligence, .github/skills/company-hiring-intelligence and .opencode/skills/company-hiring-intelligence in your project.
What does Company Hiring Intelligence need to run?
Going by SKILL.md and its folder, Company Hiring Intelligence needs the command-line tools its instructions call (npm) and credentials named TINYFISH_API_KEY. Our summary lists: Node.js; A credential in TINYFISH_API_KEY.
Does Company Hiring Intelligence access the network?
SKILL.md names 3 domains. In commands or code: linkedin.com and notion.so; the agent is likely to contact these when it follows the instructions. As links in the text: agent.tinyfish.ai. This is read from the text; nothing was executed.
Is Company Hiring Intelligence safe to install?
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
What licence does Company Hiring Intelligence use?
Company Hiring Intelligence is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
How many tokens does Company Hiring Intelligence use?
About 3.6k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
What are the alternatives to Company Hiring Intelligence?
Skills that share tags, products or a category with Company Hiring Intelligence: Linkedin Jobs Search (browser-act/skills, 6.1k stars), Apify Multi-Platform Scraper (apify/agent-skills, 2.4k stars), Apify Buying Signal Detection (apify/awesome-skills, 265 stars) and Google Maps Contact Extract (browser-act/skills, 6.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Who maintains Company Hiring Intelligence?
tinyfish-io (a GitHub organization) maintains it in tinyfish-io/tinyfish-cookbook, which has 2,226 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on October 8, 2026.
Source: tinyfish-io/tinyfish-cookbook on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.