{"id":13827289,"url":"https://github.com/simonepri/act","last_synced_at":"2025-04-28T16:09:52.262Z","repository":{"id":48315286,"uuid":"151969482","full_name":"simonepri/act","owner":"simonepri","description":"✏️ Multi-purpose URI tracker.","archived":false,"fork":false,"pushed_at":"2021-08-02T04:14:57.000Z","size":8090,"stargazers_count":6,"open_issues_count":4,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-28T16:09:46.951Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://act.now.sh","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/simonepri.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":"2018-10-07T17:55:10.000Z","updated_at":"2022-05-18T06:09:57.000Z","dependencies_parsed_at":"2022-09-21T11:30:38.297Z","dependency_job_id":null,"html_url":"https://github.com/simonepri/act","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonepri%2Fact","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonepri%2Fact/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonepri%2Fact/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simonepri%2Fact/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simonepri","download_url":"https://codeload.github.com/simonepri/act/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251342724,"owners_count":21574245,"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","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":[],"created_at":"2024-08-04T09:01:53.487Z","updated_at":"2025-04-28T16:09:52.240Z","avatar_url":"https://github.com/simonepri.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://act.now.sh\"\u003e\n    \u003cimg src=\"./media/logo.png\" height=\"120\" alt=\"Multi-purpose URI tracker\"/\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003c!-- CI - TravisCI --\u003e\n  \u003ca href=\"https://travis-ci.com/simonepri/act\"\u003e\n    \u003cimg src=\"https://img.shields.io/travis/com/simonepri/act/master.svg?label=Linux%2FMacOS%2FWindows%20build\" alt=\"Linux/MacOS/Windows build\" /\u003e\n  \u003c/a\u003e\n  \u003c!-- License - MIT --\u003e\n  \u003ca href=\"https://github.com/simonepri/act#license\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/license/simonepri/act.svg\" alt=\"Project license\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cbr /\u003e\n\u003cp align=\"center\"\u003e\n  ✏️ Multi-purpose URI tracker.\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n  \u003csub\u003e\n    Coded with ❤️ by \u003ca href=\"#authors\"\u003eSimone Primarosa\u003c/a\u003e.\n  \u003c/sub\u003e\n\u003c/p\u003e\n\u003cbr/\u003e\n\n## Synopsis\nAct is an API service that allows you to track user actions. An action is either a page/email view or a click on a link.  \nEach time a request is made to act, it automatically collects the timestamp, the device type, the operating system, the browser, the city, the region, and the country from where the request comes and then the data are written to the cloud storage of your choice and no data is stored on our side.  \nCurrently, the only storage type supported is Google Sheets!\n\n## Google Sheets\n\n### Setup\n\u003cimg width=\"400\" src=\"./media/gs.gif\" /\u003e\n\n1 - Open [Google Sheets][storage:gs].\u003cbr/\u003e\n2 - Create a new blank document.\u003cbr/\u003e\n3 - Share the document with [access@act-uri-tracker.iam.gserviceaccount.com][storage:gs-email].\u003cbr/\u003e\n4 - Copy the spreadsheet id from the URL bar.\u003cbr/\u003e\n5 - Use the spreadsheet id to make requests to act as shown below.\u003cbr/\u003e\n\n### Track views\nInsert this image inside the page you want to track substituting `\u003cSpreadsheetId\u003e` and `\u003cPageName\u003e` with the appropriate values.\n```bash\n\u003cimg src=\"https://act.now.sh/gs/\u003cSpreadsheetId\u003e?a=\u003cPageName\u003e\" /\u003e\n```\n**Example:**\u003cbr/\u003e\nEach time you [see this image](https://act.now.sh/gs/1gBD3pJ9LeJdZM1SyvRD7v077pkItVHl4laWhGeW93sE?a=Example%201) a new row is added at the end of [this spreadsheet](https://docs.google.com/spreadsheets/d/1gBD3pJ9LeJdZM1SyvRD7v077pkItVHl4laWhGeW93sE).\n\n### Track clicks\nInsert this inside the page substituting `\u003cSpreadsheetId\u003e`, `\u003cActionName\u003e`, and `\u003cLinkToTrack\u003e` with the appropriate values.\n```bash\n\u003ca href=\"https://act.now.sh/gs/\u003cSpreadsheetId\u003e?a=\u003cActionName\u003e\u0026r=\u003cLinkToTrack\u003e\" /\u003e\n```\n\n**Example:**\u003cbr/\u003e\nEach time you [click here](https://act.now.sh/gs/1gBD3pJ9LeJdZM1SyvRD7v077pkItVHl4laWhGeW93sE?a=Example%202\u0026r=https://github.com/simonepri/act) a new row is added at the end of [this spreadsheet](https://docs.google.com/spreadsheets/d/1gBD3pJ9LeJdZM1SyvRD7v077pkItVHl4laWhGeW93sE).\n\n### API\n\nMETHOD | URL | RESPONSE | BEHAVIOUR\n-------|-----|----------|----------\nGET | `https://act.now.sh/gs/\u003cSpreadsheetId\u003e` | A 1x1 transparent png image. | A new line is appended to the spreadsheet.\nGET | `https://act.now.sh/gs/\u003cSpreadsheetId\u003e?a=\u003cdata\u003e` | A 1x1 transparent png image. | A new line is appended to the spreadsheet.\nGET | `https://act.now.sh/gs/\u003cSpreadsheetId\u003e?r=\u003curi\u003e` | A 302 redirect to the uri. | A new line is appended to the spreadsheet.\nGET | `https://act.now.sh/gs/\u003cSpreadsheetId\u003e?a=\u003cdata\u003e\u0026r=\u003curi\u003e` | A 302 redirect to the uri. | A new line is appended to the spreadsheet.\n\n## Other storage\nCurrently, act supports only Google Sheets, but contributions to extend its capabilities are welcome.\n\n## Development\nIf you want to run it locally, you need to run the following commands.\n\n```bash\ngit clone https://github.com/simonepri/act.git\ncd act\n\nnpm i\nnpm start\n```\n\n## Authors\n- **Simone Primarosa** - *Github* ([@simonepri][github:simonepri]) • *Twitter* ([@simoneprimarosa][twitter:simoneprimarosa])\n\nSee also the list of [contributors][contributors] who participated in this project.\n\n## License\nThis project is licensed under the MIT License - see the [license][license] file for details.\n\n\n\u003c!-- Links --\u003e\n[contributors]: https://github.com/simonepri/act/contributors\n\n[license]: https://github.com/simonepri/act/tree/master/license\n[contributing]: https://github.com/simonepri/act/tree/master/.github/contributing.md\n\n[github:simonepri]: https://github.com/simonepri\n[twitter:simoneprimarosa]: http://twitter.com/intent/user?screen_name=simoneprimarosa\n\n[storage:gs]: https://docs.google.com/spreadsheets/\n[storage:gs-email]: mailto:access@act-uri-tracker.iam.gserviceaccount.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonepri%2Fact","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimonepri%2Fact","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimonepri%2Fact/lists"}