{"id":28206959,"url":"https://github.com/jameseball/seoarticlegenai","last_synced_at":"2026-05-18T06:34:55.901Z","repository":{"id":160377729,"uuid":"635276484","full_name":"JamesEBall/SEOArticlegenAI","owner":"JamesEBall","description":"OpenAI powered AI SEO article generator","archived":false,"fork":false,"pushed_at":"2023-05-24T13:45:24.000Z","size":58563,"stargazers_count":61,"open_issues_count":1,"forks_count":16,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-08-21T11:38:53.007Z","etag":null,"topics":["ai","openai","opengpt","seo","seo-optimization"],"latest_commit_sha":null,"homepage":"","language":"Python","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/JamesEBall.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-05-02T10:57:08.000Z","updated_at":"2025-07-30T09:57:39.000Z","dependencies_parsed_at":"2023-07-17T00:16:56.593Z","dependency_job_id":null,"html_url":"https://github.com/JamesEBall/SEOArticlegenAI","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JamesEBall/SEOArticlegenAI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JamesEBall%2FSEOArticlegenAI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JamesEBall%2FSEOArticlegenAI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JamesEBall%2FSEOArticlegenAI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JamesEBall%2FSEOArticlegenAI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JamesEBall","download_url":"https://codeload.github.com/JamesEBall/SEOArticlegenAI/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JamesEBall%2FSEOArticlegenAI/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33167668,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-18T05:43:36.989Z","status":"ssl_error","status_checked_at":"2026-05-18T05:43:19.133Z","response_time":71,"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":["ai","openai","opengpt","seo","seo-optimization"],"created_at":"2025-05-17T12:14:53.553Z","updated_at":"2026-05-18T06:34:55.896Z","avatar_url":"https://github.com/JamesEBall.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SEO Article Generator\nThis project is a tool to automatically generate 10's to 100's of thousands of SEO-optimized articles using OpenAI's Davinci Model. It reads prompts from a CSV file, sends the prompts to the OpenAI API, and processes the generated responses into structured articles, which are then saved to a separate CSV file.\n\n## How it works\nThe script has two main components:\n\n- The `prompt_generator.py` script, which generates a list of prompts based on an SEO template file.\n- The `main` script, which processes the generated prompts using OpenAI's Davinci and saves the generated articles to a CSV file.\n\n## Prompt Generation\nThe prompt_generator.py script takes an SEO template file as input, which contains a list of keys in the following format:\n```\nCategory,object,type\nBikeBrands\tScott\tbikebrand\nBikeBrands\tOrbea\tbikebrand\nBikeBrands\tRaleigh\tbikebrand\nBikeBrands\tMerida\tbikebrand\nBikeBrands\tWhat is {bikebrand}?\tquestion\nBikeBrands\tA beginner's guide to {bikebrand} bikes\tquestion\nBikeBrands\t{bikebrand} bike review: Pros and cons\tquestion\nBikeBrands\tTop alternatives to {bikebrand} bikes\tquestion\n...\n```\n\nEach row represents a category, an object, and its type. The script generates a list of prompts by combining objects and their types. The prompts are then saved to an output CSV file, which will be used as input for the main script.\n\nThese are then keyed into statements to create a semantic sequence:\n\n```\nBikeBrands\tOrbea\tbikebrand\nBikeBrands\tRaleigh\tbikebrand\nBikeBrands\t{bikebrand} bike review: Pros and cons\tquestion\n\ne.g. Based on the above SEO query \"{bikebrand} bike review: Pros and cons\"\n\nThe above produces the following permutations:\n- Orbea bike review: Pros and cons\n- Raleigh bike review: Pros and cons\n```\n\n\n## Article Generation\nThe main script reads the prompts from the output CSV file generated by prompt_generator.py. For each prompt, it sends a request to OpenAI's API, passing the prompt and some additional parameters like temperature, max tokens, top-p, frequency penalty, and presence penalty.\n\nThe Davinci model processes the prompt and generates a response. The script then processes the response and extracts the article's title, subtitle, and body. The article is then saved to a separate CSV file.\n\n### Usage\n1. Set up your OpenAI API key and organization ID as environment variables. You can use a .env file for this purpose:\n```\nOPENAI_API_KEY=your_openai_api_key\nOPENAI_ORGANIZATION_ID=your_openai_organization_id (**Optional**)\n```\n2. Setup variables in the main script.\n```\nUSE_SAMPLE_PROMPTS = True  # Set to False to use input file\nGENERATE_PDFS = True  # Set to False to disable PDF generation\nSAMPLES_PER_CAT = 1  # Number of samples per category in sample mode\nSEO_TOKENS = \"example_SEO_Template.csv\" # Name of the token input file (see example).\n```\n3. Run the main script:\n```\npython main.py\n```\nThe script will generate a list of prompts based on the SEO template file, send the prompts to OpenAI's API, and save the generated articles to a CSV file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjameseball%2Fseoarticlegenai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjameseball%2Fseoarticlegenai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjameseball%2Fseoarticlegenai/lists"}