{"id":47620888,"url":"https://github.com/zearibrahim/zscraper","last_synced_at":"2026-04-01T22:04:05.777Z","repository":{"id":57690600,"uuid":"480361791","full_name":"zearibrahim/zscraper","owner":"zearibrahim","description":"Node.js module to scrape Zoom meeting and participant data manually using Puppeteer.","archived":false,"fork":false,"pushed_at":"2022-05-11T16:17:01.000Z","size":28,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-02T18:23:27.734Z","etag":null,"topics":["automation","headless-chrome","nodejs","puppeteer","scraper","scraperjs","web","zoom","zoom-meetings","zoom-us"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/zearibrahim.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}},"created_at":"2022-04-11T12:04:07.000Z","updated_at":"2023-09-08T18:33:32.000Z","dependencies_parsed_at":"2022-09-26T20:52:38.763Z","dependency_job_id":null,"html_url":"https://github.com/zearibrahim/zscraper","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/zearibrahim/zscraper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zearibrahim%2Fzscraper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zearibrahim%2Fzscraper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zearibrahim%2Fzscraper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zearibrahim%2Fzscraper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zearibrahim","download_url":"https://codeload.github.com/zearibrahim/zscraper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zearibrahim%2Fzscraper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31292631,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T21:15:39.731Z","status":"ssl_error","status_checked_at":"2026-04-01T21:15:34.046Z","response_time":53,"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":["automation","headless-chrome","nodejs","puppeteer","scraper","scraperjs","web","zoom","zoom-meetings","zoom-us"],"created_at":"2026-04-01T22:04:05.089Z","updated_at":"2026-04-01T22:04:05.713Z","avatar_url":"https://github.com/zearibrahim.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# zscraper\n\nNode.js module to scrape Zoom participant data manually using [Puppeteer](https://github.com/puppeteer/puppeteer).\n\n## Notes\n\nThis module scrapes Zoom conference participant data by visiting the [reporting pages](https://zoom.us/account/my/report) for your organisation. Authentication is handled manually and requires users to approve the login attempt through a pre-configured authenticator app.\n\nThis module maybe useful for users when:\n* They cannot configure or use the Zoom API,\n* The Zoom account is restricted by their organisation:\n    * Microsoft Active Directory prevents them from authorising their application,\n    * Microsoft Active Directory/2FA authentication policy prevents them from requesting TOTP tokens in their application,\n    * The account has API limits or is not part of a Zoom Pro Plan.\n\n## Installation\n```sh\n$ npm i zscraper\n```\n\n## Example\n### Import ZoomScraper and Puppeteer modules\n```js\nimport ZoomScraper from \"zscraper\";\nimport Puppeteer from \"puppeteer\";\n```\n\n### Create a Puppeteer Instance\n```js\n// Setup Puppeteer options\nconst puppeteerOptions = {\n    headless: false,\n    defaultViewport: null,\n};\n\n// Creates puppeteer/chromium instance\nconst browser = await Puppeteer.launch(puppeteerOptions);\nconst page = await browser.newPage();\n```\n\n### Create a ZoomScraper Instance\n    Note: Organisation must hold an active Zoom license\n```js\n// Instantiate scraper with your organisations' name\nconst zoom = new ZoomScraper(\"navitas\");\n```\n\n### Login To Zoom\nIn this version, the Zoom `login` method requires manual approval through a pre-configured authenticator such as a mobile phone. If no approval is given, this method will time out.\n```js\n// Login to given organisation with user name and password\nawait zoom.login(page, ZOOM_ID, ZOOM_PASSWORD);\n```\n### Retrieve Meeting Data\nThis method returns all meetings between the given dates in `mm/dd/yyyy` format.\n\n```js\n// Get meetings as custom data object between _from and _to dates.\nconst meetings = await zoom.getMeetings(page, \"04/01/2022\", \"04/03/2022\");\n```\n### Output\nOnce pupulated, the meeting object may be printed in accordance with the [Meeting Interface Types](#meeting-interface-types).\n```js\n// Print all details\nconsole.log(meetings[0]);\n\n// or\n\n// Print host email for particular meeting\nconsole.log(meetings[0].host);\n\n// or\n\n// Print participant details for particular meeting\nconsole.log(meetings[0].participants);\n```\n### Meeting Interface Types\nThe `meetings` object holds a list of meetings represented by the `IZoomMeetings` interface type. \n\n```ts\ninterface IZoomMeetings extends Array\u003cIZoomMeeting\u003e { }\n```\n\nIndividual meetings are represented by the `IZoomMeeting` interface type.\n```ts\ninterface IZoomMeeting {\n    id: string;\n    topic: string;\n    date: string;\n    timeFromTopic: string;\n    host: string;\n    participants: IZoomParticipants;\n}\n```\n\nThe `participants` property in `IZoomMeeting` holds a list of paticipants represented by the `IZoomParticipants` interface type. \n\n```ts\ninterface IZoomParticipants extends Array\u003cIZoomParticipant\u003e { }\n```\n\nA single participant is represented through the `IZoomParticipant` interface type:\n```ts\ninterface IZoomParticipant {\n    name: string;\n    email: string;\n    duration: string;\n    guest: string;\n}\n```\n\n## How To Run\nPlace the [example](#example) code in an `index.js` file at the `root` of a new Node.js project. \n\n```sh\n$ node index.js\n\n# or if running with .env variables\n\n$ node -r dotenv/config index.js\n```\n\n## Licence\nMIT © [Zear Ibrahim](https://www.brunel.ac.uk/people/zear-ibrahim1)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzearibrahim%2Fzscraper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzearibrahim%2Fzscraper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzearibrahim%2Fzscraper/lists"}