{"id":48833559,"url":"https://github.com/gamehunterkaan/companyenum","last_synced_at":"2026-04-14T22:02:07.691Z","repository":{"id":350713919,"uuid":"659419031","full_name":"GamehunterKaan/CompanyEnum","owner":"GamehunterKaan","description":"OSINT sweep on a company name — Flask dashboard that scrapes Craft.co, Trustpilot, CareerBliss, WHOIS, and web-tech scanners in parallel.","archived":false,"fork":false,"pushed_at":"2026-04-11T17:09:06.000Z","size":32370,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-11T19:11:17.296Z","etag":null,"topics":["cybersecurity","cybersecurity-tools","osint","osint-python","osint-tool","python","python3"],"latest_commit_sha":null,"homepage":"https://kaangultekin.net/projects/company-enum/","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GamehunterKaan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-06-27T19:47:00.000Z","updated_at":"2026-04-11T17:11:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/GamehunterKaan/CompanyEnum","commit_stats":null,"previous_names":["gamehunterkaan/companyenum"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/GamehunterKaan/CompanyEnum","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GamehunterKaan%2FCompanyEnum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GamehunterKaan%2FCompanyEnum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GamehunterKaan%2FCompanyEnum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GamehunterKaan%2FCompanyEnum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GamehunterKaan","download_url":"https://codeload.github.com/GamehunterKaan/CompanyEnum/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GamehunterKaan%2FCompanyEnum/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31817128,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T18:05:02.291Z","status":"ssl_error","status_checked_at":"2026-04-14T18:05:01.765Z","response_time":153,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cybersecurity","cybersecurity-tools","osint","osint-python","osint-tool","python","python3"],"created_at":"2026-04-14T22:02:05.466Z","updated_at":"2026-04-14T22:02:07.678Z","avatar_url":"https://github.com/GamehunterKaan.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CompanyEnum\n\nA Flask web app that runs a one-shot OSINT sweep on a company name and presents the findings in a live dashboard. You type a company, watch each scraper report progress in real time, and get a tabbed report covering the company profile, financials, people, web-tech posture, and customer/employee reviews.\n\n![CompanyEnum Input](images/companyenum-input.png)\n\n## What it collects\n\n| Tab         | Sources                              | Data                                                                                  |\n| ----------- | ------------------------------------ | ------------------------------------------------------------------------------------- |\n| Summary     | Craft.co, Google (website fallback)  | Company name, website, HQ, founded date, description, sectors, competitors           |\n| Financials  | Craft.co                             | Stock price, market cap, revenue                                                      |\n| People      | Craft.co                             | Executives with roles                                                                 |\n| Technology  | securityheaders.com, SSL Shopper, Sucuri SiteCheck, whois.com | HTTP security-header grade, raw headers, TLS cert + SANs, Sucuri ratings and recommendations, WHOIS records |\n| Ratings     | Trustpilot, CareerBliss              | Aggregate scores and recent reviews with star widgets                                 |\n\n## How it works\n\nSubmissions start a background thread that runs each scraper sequentially and writes per-step state into an in-memory job store. The browser gets redirected to a loading page that polls `/status/\u003cjob_id\u003e` every 500 ms and renders each step as pending → running → done / skipped / error. When the job finishes, the page auto-navigates to `/result/\u003cjob_id\u003e`.\n\nScrapers in [submodules/](submodules/) are a mix of three strategies depending on how aggressive the target is about bot detection:\n\n- **requests / BeautifulSoup** for sites that don't block (whois.com, SSL Shopper, Sucuri API).\n- **cloudscraper** for Cloudflare-protected sites that still accept a good browser fingerprint (Craft.co, securityheaders.com).\n- **Playwright + playwright-stealth** (headless Chromium) for sites whose anti-bot won't budge without a real browser (Trustpilot, CareerBliss).\n\n![CompanyEnum Summary](images/companyenum-summary.png)\n\n## Project layout\n\n```\nmain.py                 Flask app, routes, background job runner\nrequirements.txt        Python dependencies\nsubmodules/\n    craftco.py          Craft.co profile + executives scraper\n    trustpilot.py       Trustpilot reviews (Playwright)\n    careerbliss.py      CareerBliss reviews (Playwright)\n    findwebsite.py      Website resolver (Craft.co field + Google fallback)\n    securityheaders.py  securityheaders.com scanner\n    sslhopper.py        SSL Shopper cert checker\n    sucuri.py           Sucuri SiteCheck API client\n    whoisquery.py       whois.com scraper\n    compiledata.py      HTML rendering for each output tab\nstatic/\n    style.css           Input page (waves, gradient, search bar)\n    loading.css         Loading page (progress bar + step list)\n    output-style.css    Report page (cards, tags, stars, grade badge)\n    script.js           Output page tab switching + scroll progress\ntemplates/\n    input.html          Search form with example chips\n    loading.html        Live progress UI\n    output.html         Tabbed report\n```\n\n## Installation\n\nRequires Python 3.9+.\n\n```bash\npip install -r requirements.txt\nplaywright install chromium\n```\n\nThe second command downloads the headless Chromium binary Playwright needs for Trustpilot and CareerBliss.\n\n## Running\n\n```bash\npython main.py\n```\n\nThen open `http://127.0.0.1:5000/` and enter a company name. Use the example chips on the input page for a quick test.\n\n## Notes\n\n- The in-memory job store is capped at 32 entries and evicts oldest-first.\n- A single scan takes roughly 20-40 seconds depending on network and which scrapers stall.\n- If Craft.co can't find the company, the website resolver falls back to a Google search, which may itself fail silently if Google serves a CAPTCHA; in that case the Technology tab is filled with \"Company website not found\" placeholders and everything else still works.\n- The scrapers target real HTML and API shapes that change without warning. Expect occasional breakage when a source restructures its page.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgamehunterkaan%2Fcompanyenum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgamehunterkaan%2Fcompanyenum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgamehunterkaan%2Fcompanyenum/lists"}