{"id":20085341,"url":"https://github.com/saasify-sh/puppet-master","last_synced_at":"2025-10-14T17:07:51.841Z","repository":{"id":49251867,"uuid":"208180292","full_name":"saasify-sh/puppet-master","owner":"saasify-sh","description":"Puppeteer as a service hosted on Saasify.","archived":false,"fork":false,"pushed_at":"2021-06-21T20:57:18.000Z","size":397,"stargazers_count":26,"open_issues_count":8,"forks_count":8,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-14T17:07:51.038Z","etag":null,"topics":["crawling","headless-chrome","pdf","puppeteer","saas","screenshot"],"latest_commit_sha":null,"homepage":"https://puppet-master.sh","language":"TypeScript","has_issues":true,"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/saasify-sh.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}},"created_at":"2019-09-13T02:13:50.000Z","updated_at":"2024-05-09T12:43:52.000Z","dependencies_parsed_at":"2022-08-20T08:22:21.086Z","dependency_job_id":null,"html_url":"https://github.com/saasify-sh/puppet-master","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/saasify-sh/puppet-master","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saasify-sh%2Fpuppet-master","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saasify-sh%2Fpuppet-master/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saasify-sh%2Fpuppet-master/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saasify-sh%2Fpuppet-master/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/saasify-sh","download_url":"https://codeload.github.com/saasify-sh/puppet-master/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/saasify-sh%2Fpuppet-master/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279020085,"owners_count":26086805,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"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":["crawling","headless-chrome","pdf","puppeteer","saas","screenshot"],"created_at":"2024-11-13T15:55:41.455Z","updated_at":"2025-10-14T17:07:51.826Z","avatar_url":"https://github.com/saasify-sh.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Puppet Master\n\n\u003e [Puppeteer](https://pptr.dev) as a [service](https://puppet-master.sh).\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://puppet-master.sh\" title=\"Puppet Master\"\u003e\n    \u003cimg src=\"https://raw.githubusercontent.com/saasify-sh/puppet-master/master/media/puppeteer-logo.png\" alt=\"Puppeteer Logo\" width=\"200\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n## Features\n\n- **Simple**: Quick to setup and integrate\n- **Standard**: Just HTTPS + JSON\n- **Managed**: Hosted via serverless functions\n- **Scalable**: Scales to any capacity\n- **Usage based**: Pay only for what you use\n- **Focused**: We only do one thing and do it well\n- **Immutable deployments**: All API updates are optional\n\n## Contents\n\n\u003c!-- toc --\u003e\n\n- [Introduction](#introduction)\n- [Functions](#functions)\n  * [Screenshot](#screenshot)\n  * [Pdf](#pdf)\n  * [Common Options](#common-options)\n- [FAQ](#faq)\n  * [Why are my screenshots blurry?](#why-are-my-screenshots-blurry)\n  * [How is this project different from other alternatives?](#how-is-this-project-different-from-other-alternatives)\n  * [The functionality I need is missing.](#the-functionality-i-need-is-missing)\n  * [How do subscriptions work?](#how-do-subscriptions-work)\n  * [This project is great! How can I help out?](#this-project-is-great-how-can-i-help-out)\n  * [How can I debug potential issues with the API?](#how-can-i-debug-potential-issues-with-the-api)\n- [License](#license)\n\n\u003c!-- tocstop --\u003e\n\n## Introduction\n\nPuppet Master provides hosted, serverless SaaS APIs for controlling headless chrome in the cloud.\n\nOur goal is to make it really simple for developers to scale automated browser workflows via [Puppeteer](https://pptr.dev).\n\n## Functions\n\n### Screenshot\n\nNavigates to a page and captures a screenshot via Puppeteer's [Page.screenshot](https://pptr.dev/#?product=Puppeteer\u0026version=v1.19.0\u0026show=api-pagescreenshotoptions).\n\nAll Puppeteer options are supported.\n\nReturns an image as either `image/png` or `image/jpeg` depending on the `type` parameter.\n\n### Pdf\n\nNavigates to a page and captures a PDF via Puppeteer's [Page.pdf](https://pptr.dev/#?product=Puppeteer\u0026version=v1.19.0\u0026show=api-pagepdfoptions).\n\nAll Puppeteer options are supported.\n\nReturns a PDF as `application/pdf`.\n\n### Common Options\n\nIn addition to the standard parameters, all functions optionally accept a set of additional common options.\n\n- [viewport](https://pptr.dev/#?product=Puppeteer\u0026version=v1.19.0\u0026show=api-pagesetviewportviewport) - Set the browser window's viewport dimensions and/or resolution.\n- [userAgent](https://pptr.dev/#?product=Puppeteer\u0026version=v1.19.0\u0026show=api-pagesetuseragentuseragent) - Set the browser's [user-agent](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent).\n  - Useful to trick websites into displaying different content or styles based on an emulated device.\n- [gotoOptions](https://pptr.dev/#?product=Puppeteer\u0026version=v1.19.0\u0026show=api-pagegotourl-options) - Customize the `Page.goto` navigation options.\n  - Useful when you need to customize behavior around when Puppeteer considers a page navigation \"finished\".\n- [emulateDevice](https://pptr.dev/#?product=Puppeteer\u0026version=v1.19.0\u0026show=api-pageemulateoptions) - Make it look like the screenshot was taken on the specified device.\n  - Use the `name` property from one of the built-in [devices](https://github.com/GoogleChrome/puppeteer/blob/master/lib/DeviceDescriptors.js).\n  - Overrides `viewport` and `userAgent`.\n\n## FAQ\n\n### Why are my screenshots blurry?\n\nTry setting [viewport.deviceScaleFactor](https://pptr.dev/#?product=Puppeteer\u0026version=v1.19.0\u0026show=api-pagesetviewportviewport) to `2` to emulate a retina display.\n\n### How is this project different from other alternatives?\n\nThe differences can be broken down into two areas:\n\n**Functionality**\n\n- We use serverless functions to provide maximum scalability while minimizing cost.\n- This also means that you only pay for what you actually use.\n- You could set this up yourself, but headless chrome is a resource hog and who wants to setup and manage another async task queue?\n- We also allow you to run functions locally which is essential for debugging.\n\n**Philisophy**\n\nThe core motivation behind this project lies in trying to tackle the problem of open source sustainability.\n\nTowards that end, every aspect of this SaaS product aside from the core functionality was generated automatically via [Saasify](https://saasify.sh), the Shopify for SaaS. That includes the template-based marketing website, OpenAPI-based API docs, serverless function hosting, user account management, usage-based billing integration, legal docs, and support.\n\nIt's our hope that by greatly simplifying and automating the process of launching SaaS APIs, open source authors will be much more inclined to monetize their work and help to sustain their passion while still holding true to the underlying nature of OSS.\n\nPuppet Master is therefore a SaaS product that is fully generated from the source code in this repository. If you know how to create an open source TypeScript project like this one, you're already 95% of your way towards creating your own monetizable SaaS product!\n\n### The functionality I need is missing.\n\nWe're actively looking for feedback and feature suggestions.\n\nPlease [contact us](mailto:support@saasify.sh) or open an issue on this repo.\n\nThanks!\n\n### How do subscriptions work?\n\nAll APIs come with a free public tier that is rate-limited so you can test things out before signing up for a subscription.\n\nSaasify uses [Stripe](https://stripe.com) to securely handle all payments, subscriptions, and invoices.\n\nWe use usage-based, metered subscriptions that charge fractions of a cent depending on three factors:\n\n- Number of authenticated API calls\n- Aggregate compute time\n- Bandwidth in / out\n\nSigning up for a subscription starts a weekly billing cycle. Note that you will only be charged for what you use.\n\nSee [pricing](/pricing) for more details.\n\n### This project is great! How can I help out?\n\nCollaboration is what makes open source truly powerful! If you're interested in working on Puppet Master or have an idea for your own Saasify product, please [contact us](mailto:info@saasify.sh) to learn more. Thanks!\n\n### How can I debug potential issues with the API?\n\nIf your API calls are not working or returning unexpected results, the best way to troubleshoot is to try and reproduce your issue by running the project locally.\n\n- Clone this repository\n- Install `saasify` globally via `npm install -g saasify`\n- Run `saasify dev` at the repo root specifying an additional environment variable `PUPPET_MASTER_DEBUG`\n\n```\nPUPPET_MASTER_DEBUG=1 saasify dev\n```\n\nThis will run the deployment locally with a non-headless browser and `slowMo` set to `1000`.\n\nThen just change the URL you're calling to be the corresponding `localhost` URL and investigate the issue.\n\n## License\n\nMIT © [Saasify](https://saasify.sh)\n\n\nSupport my OSS work by \u003ca href=\"https://twitter.com/transitive_bs\"\u003efollowing me on twitter \u003cimg src=\"https://storage.googleapis.com/saasify-assets/twitter-logo.svg\" alt=\"twitter\" height=\"24px\" align=\"center\"\u003e\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaasify-sh%2Fpuppet-master","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsaasify-sh%2Fpuppet-master","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsaasify-sh%2Fpuppet-master/lists"}