{"id":15808816,"url":"https://github.com/matthewmckenna/jobnotify","last_synced_at":"2026-04-26T12:32:56.472Z","repository":{"id":62572594,"uuid":"89740981","full_name":"matthewmckenna/jobnotify","owner":"matthewmckenna","description":"Get alerts about new job listings.","archived":false,"fork":false,"pushed_at":"2017-05-04T11:01:17.000Z","size":47,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-12T07:25:22.198Z","etag":null,"topics":["email","indeed","notifications","slack"],"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/matthewmckenna.png","metadata":{"files":{"readme":"README.rst","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":"2017-04-28T20:06:45.000Z","updated_at":"2026-01-23T05:02:34.000Z","dependencies_parsed_at":"2022-11-03T17:02:17.431Z","dependency_job_id":null,"html_url":"https://github.com/matthewmckenna/jobnotify","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/matthewmckenna/jobnotify","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthewmckenna%2Fjobnotify","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthewmckenna%2Fjobnotify/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthewmckenna%2Fjobnotify/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthewmckenna%2Fjobnotify/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matthewmckenna","download_url":"https://codeload.github.com/matthewmckenna/jobnotify/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthewmckenna%2Fjobnotify/sbom","scorecard":{"id":626732,"data":{"date":"2025-08-11","repo":{"name":"github.com/matthewmckenna/jobnotify","commit":"25bf0d3f397779b2ed42c5a4a1b1a13e3793e490"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/7 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}}]},"last_synced_at":"2025-08-21T06:42:18.264Z","repository_id":62572594,"created_at":"2025-08-21T06:42:18.264Z","updated_at":"2025-08-21T06:42:18.264Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32297895,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T09:34:17.070Z","status":"ssl_error","status_checked_at":"2026-04-26T09:34:00.993Z","response_time":129,"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":["email","indeed","notifications","slack"],"created_at":"2024-10-05T03:07:16.834Z","updated_at":"2026-04-26T12:32:56.452Z","avatar_url":"https://github.com/matthewmckenna.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"###########\nJob Notify\n###########\n\n``jobnotify`` is a command-line utility to help alert you to new job postings.\n\n.. note:: This project requires Python \u003e= 3.6.0\n\n\nInstallation\n=============\n\n.. note:: It is recommended to install this application in a virtual environment.\n\nThe easiest way to install this project is via ``pip``::\n\n    $ pip install jobnotify\n\nAlternatively, you can clone the repository to get the `source code\n\u003chttps://github.com/matthewmckenna/jobnotify\u003e`_.\n\n::\n\n    $ git clone https://github.com/matthewmckenna/jobnotify.git\n    $ cd jobnotify\n    $ pip install .\n\nThis will ensure that the application is set up correctly.\n\n\nPrerequisites\n==============\n\nIndeed\n-------\n\n#. Sign up for an `Indeed Publisher account`_ and log in.\n#. Click on the ``Job Search API`` tab. Under ``Sample Request`` section you\n   will find your ``publisher ID``. Take note of this key, as you will need it\n   later.\n\nGmail\n------\nTo receive notifications via email, you will need a `Gmail account`_ to send\nthe emails.\n\nWhile it may be possible to use an existing Gmail account to both send and\nreceive the emails, this option has not been tested. This option also comes with\na downside in that your password to this account will be stored in plaintext on\nyour machine. If this is your primary account this is certainly not desirable.\n\nI recommend setting up a new account to send the notification emails. This is a\nquick process and the account can be used in future for other notification tasks.\nNow, we will quickly set up an ``App password`` for this application.\n\n#. When you have set up your account, click on your avatar in the top-right, and\n   navigate to ``My Account``.\n#. Under ``Sign-in \u0026 security`` click on the ``Signing into Google`` link.\n#. Click on ``App passwords``.\n#. Generate a password and take note of this. This will be needed when\n   configuring ``jobnotify``.\n\nSlack\n------\nIf you wish to receive job notifications via Slack, then please follow the\ninstructions in `Slack Configuration`_.\n\nConfiguration\n==============\n\nYour configuration file for ``jobnotify`` will be located in ``~/.jobnotify``,\nand will be named ``jobnotify.config``.\n\nThe quickest way to get a skeleton configuration file is by running the\napplication with the ``-c`` or ``--config`` flag as follows:\n\n.. code-block:: sh\n\n    $ jobnotify --config\n\nThe will set-up the ``.jobnotify`` application data directory in your home\ndirectory.\n\nYou will need to edit the ``jobnotify.config`` file and fill out valid values.\nTerms in brackets ``[]`` are sections. There are a number of required fields\nfor each section, detailed below:\n\n``[indeed]`` section\n---------------------\n==============  ======================================================================\nKey             Description\n==============  ======================================================================\n``key``         Indeed API Publisher Key\n``location``    Location/city to search - e.g., ``dublin``.\n``country``     Country code to search - e.g., ``ie`` for Ireland, ``gb`` for\n                the United Kingdom.\n``query``       Job search term - e.g., ``data scientist``.\n``radius``      Distance (in km) from search location 'as the crow flies'.\n==============  ======================================================================\n\n\n``[email]`` section\n---------------------\n===============  ================================================================\nKey              Description\n===============  ================================================================\n``email_from``   Email address of account which will send notification.\n``password``     Password of account which will send notification.\n``email_to``     Recipient email address.\n===============  ================================================================\n\nOptional parameters\n^^^^^^^^^^^^^^^^^^^^\n\nThese optional keys are included under the ``email`` section.\n\n================  ================================================================\nKey               Description\n================  ================================================================\n``name``          Recipient first name (used only to personalise email message).\n``sender_name``   Name for account sending the email, e.g., ``Job-Notify``.\n``signature``     Sign-off used in email message.\n================  ================================================================\n\n\n``[slack]`` section\n--------------------\n\nMore detail can be found in the `Slack Configuration`_ document.\n\n============  ================================================================\nKey           Description\n============  ================================================================\n``token``     Slack token for your bot.\n``channel``   Name of the Slack channel to post to. You must also include\n              the ``#``, e.g., ``#jobs``.\n============  ================================================================\n\n\n``[notify_via]`` section\n-------------------------\n\nThe values for the keys below should be ``true`` or ``false``. Note that at\nleast one option must be set ``true`` below.\n\n==========  =================================\nKey         Description\n==========  =================================\n``email``   Send notifications via email.\n``slack``   Send notifications via Slack.\n==========  =================================\n\n\nUsage\n======\n\nBefore running ``jobnotify``, make sure that you have followed the instructions\nunder the `Prerequisites`_ and `Configuration`_ sections above.\n\nTo run simply execute the following:\n\n.. code-block:: sh\n\n    $ jobnotify\n\nTo run this application automatically, one can use a ``cron job``. To edit your\n``crontab`` file, execute the following:\n\n.. code-block:: sh\n\n    $ crontab -e\n\nSay for example, you wished to run the application four times a day, at 09:00,\n13:00, 18:00 and 22:00. Your ``crontab`` entry would resemble the following::\n\n    * 9,13,18,22 * * * /home/matthew/miniconda3/envs/jn/bin/jobnotify\n\nIn the example above, note that I have provided the full path to the ``jobnotify``\napplication. In the case above, I had ``pip install``ed  ``jobnotify`` to a\nnew virtual environment named ``jn``. To find the full path to the application\nyou can run:\n\n.. code-block:: sh\n\n    $ which jobnotify\n\nfrom your terminal.\n\n\nOptions\n=====================\n\nIf you wish to manually run the application, there are some command-line options\navailable, detailed below:\n\n\n-v, --verbose  Turn on logging to file. This will output a file named\n               ``.jobnotify.log`` in your current directory.\n-c, --config  Used to create the ``.jobnotify`` application data directory and\n              sample configuration file.\n-f FILE, --file=FILE  Path to alternate configuration file. Defaults to\n                      ``~/.jobnotify/jobnotify.config``\n\nTroubleshooting\n================\n\nIf you encounter any issues, please carry out the following:\n\n#. Run the application with the ``-v`` or ``--verbose`` flag. This will create\n   a log file in your current directory named ``.jobnotify.log``.\n#. Capture any output from your terminal and add to a text file.\n\nCreate an issue and attach both files.\n\n\n.. _Indeed Publisher account: https://secure.indeed.com/account/register\n.. _Gmail account: https://accounts.google.com/SignUp?hl=en\n.. _Slack Configuration: https://github.com/matthewmckenna/jobnotify/blob/master/docs/slack_config.rst\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatthewmckenna%2Fjobnotify","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatthewmckenna%2Fjobnotify","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatthewmckenna%2Fjobnotify/lists"}