{"id":31364364,"url":"https://github.com/umikoio/thm-iframe-parser","last_synced_at":"2026-05-14T20:31:58.914Z","repository":{"id":316731155,"uuid":"1064486241","full_name":"umikoio/thm-iframe-parser","owner":"umikoio","description":"Ingest profile data from TryHackMe's public iframe and convert it to JSON","archived":false,"fork":false,"pushed_at":"2025-09-26T09:59:25.000Z","size":1384,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-26T11:43:37.639Z","etag":null,"topics":["cybersecurity","html","iframe","json","parsing","scraping","tryhackme"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/umikoio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2025-09-26T05:36:49.000Z","updated_at":"2025-09-26T09:59:29.000Z","dependencies_parsed_at":"2025-09-26T11:43:40.771Z","dependency_job_id":null,"html_url":"https://github.com/umikoio/thm-iframe-parser","commit_stats":null,"previous_names":["umikoio/thm-iframe-parser"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/umikoio/thm-iframe-parser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umikoio%2Fthm-iframe-parser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umikoio%2Fthm-iframe-parser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umikoio%2Fthm-iframe-parser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umikoio%2Fthm-iframe-parser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/umikoio","download_url":"https://codeload.github.com/umikoio/thm-iframe-parser/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umikoio%2Fthm-iframe-parser/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33042126,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T13:14:54.681Z","status":"online","status_checked_at":"2026-05-14T02:00:06.663Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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","html","iframe","json","parsing","scraping","tryhackme"],"created_at":"2025-09-27T07:04:20.529Z","updated_at":"2026-05-14T20:31:58.909Z","avatar_url":"https://github.com/umikoio.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg width=\"25%\" src=\"assets/logo.png\" /\u003e\n  \u003ch1\u003eTryHackMe iframe Parser\u003c/h1\u003e\n  \u003cp\u003eIngest profile data from TryHackMe's public iframe and convert it to JSON.\u003c/p\u003e\n\u003c/div\u003e\n\nThis project is pretty simple in nature. It ingests the public iframe provided by TryHackMe, parses the incoming data, and converts it to JSON. The JSON report provides almost all of the data you would probably be interested in for sharing info about your TryHackMe account. This tool does not collect any private information or bypass any API infrastructure.\n\n# Endpoints\n| Title           | Data Type | Example\n|-----------------|-----------|---------|\n| userPublicId    | `Integer` | 5672619\n| SourceURL       | `String`  | https://tryhackme.com/api/v2/badges/public-profile?userPublicId=5672619\n| Rank            | `Integer` | 464176\n| Streak          | `String`  | 30 days\n| Badges          | `Integer` | 10\n| CompletedRooms  | `Integer` | 100\n| Level           | `String`  | [0x5]\n| ProfileImage    | `String`  | https://tryhackme-images.s3.amazonaws.com/user-avatars/*\n\n## Usage\n\nOutput user data to a file:\n```bash\npython3 thm-iframe-parser.py --user 5672619 --output thm_user.json\n```\n\nYou can save the profile picture locally as well:\n```bash\npython3 thm-iframe-parser.py --user 5672619 --output thm_user.json --save thm_user.jpg\n```\n\nParse JSON directly in the terminal (this shows the value for \"Badges\"):\n```bash\npython3 thm-iframe-parser.py --user 5672619 | jq \".Data.Badges\"\n# or\npython3 thm-iframe-parser.py --user 5672619 | jq -r \".Data.Streak\"\n```\n\n## JSON Example\n```json\n{\n  \"userPublicId\": 5672619,\n  \"SourceURL\": \"https://tryhackme.com/api/v2/badges/public-profile?userPublicId=5672619\",\n  \"Data\": {\n    \"Rank\": 464201,\n    \"Streak\": \"9 days\",\n    \"Badges\": 7,\n    \"Completed Rooms\": 17,\n    \"Level\": \"[0x5]\",\n    \"ProfileImage\": \"https://tryhackme-images.s3.amazonaws.com/user-avatars/*\"\n  }\n}\n```\n\n\u003e [!NOTE]\n\u003e Check out the GitHub Workflow I created [here](https://github.com/umikoio/umikoio/blob/main/.github/workflows/update-readme.yml) that automtically collects TryHackMe public data (this script) and periodically updates a GitHub README.\n\n\u003e [!IMPORTANT]\n\u003e At any time TryHackMe can change the HTML data within their iframe. This could potentially break the script. If you notice any problems, feel free to open an [issue](https://github.com/umikoio/thm-iframe-parser/issues).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fumikoio%2Fthm-iframe-parser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fumikoio%2Fthm-iframe-parser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fumikoio%2Fthm-iframe-parser/lists"}