seoscoreapi 1.2.0__tar.gz → 1.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,88 @@
1
+ Metadata-Version: 2.4
2
+ Name: seoscoreapi
3
+ Version: 1.3.0
4
+ Summary: Python client for SEO Score API — audit any URL for SEO issues with one function call
5
+ Author-email: SEO Score API <info@seoscoreapi.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://seoscoreapi.com
8
+ Project-URL: Documentation, https://seoscoreapi.com/docs
9
+ Project-URL: Repository, https://github.com/avansledright/seoscoreapi.com
10
+ Keywords: seo,audit,api,seo-score,website-audit,seo-checker
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Requires-Python: >=3.8
16
+ Description-Content-Type: text/markdown
17
+ Requires-Dist: requests>=2.20
18
+
19
+ # seoscoreapi
20
+
21
+ Python client for [SEO Score API](https://seoscoreapi.com) — audit any URL for SEO issues with one function call.
22
+
23
+ ## Install
24
+
25
+ ```bash
26
+ pip install seoscoreapi
27
+ ```
28
+
29
+ ## Quick Start
30
+
31
+ ```python
32
+ from seoscoreapi import audit, signup
33
+
34
+ # Get a free API key (5 audits/day)
35
+ key = signup("you@example.com")
36
+
37
+ # Run an audit
38
+ result = audit("https://example.com", api_key=key)
39
+ print(f"Score: {result['score']}/100 ({result['grade']})")
40
+ ```
41
+
42
+ ## Functions
43
+
44
+ | Function | Description |
45
+ |---|---|
46
+ | `signup(email)` | Get a free API key |
47
+ | `audit(url, api_key)` | Run SEO audit on a URL |
48
+ | `batch_audit(urls, api_key)` | Audit up to 10 URLs in one call (paid) |
49
+ | `compare(urls, api_key)` | Compare 2–5 URLs with a structured diff (Basic+) |
50
+ | `competitive_audit(url, competitor_url, keyword, api_key)` | Head-to-head audit with gap score (Pro+) |
51
+ | `history(url, api_key, limit=100, since=None)` | Full audit timeseries + summary for a URL (Starter+) |
52
+ | `history_domains(api_key)` | Every domain audited by this key with latest score and 30-day trend (Starter+) |
53
+ | `usage(api_key)` | Check usage and limits |
54
+ | `add_monitor(url, api_key, frequency="daily", webhook_url=None, alert_threshold=5)` | Set up score monitoring with optional Slack/webhook alerts (paid) |
55
+ | `list_monitors(api_key)` | List active monitors |
56
+ | `scoreboard_opt_out(api_key, opt_out=True)` | Opt in or out of the public scoreboard |
57
+ | `report_url(domain)` | Get shareable report URL |
58
+
59
+ ## Historical tracking
60
+
61
+ Every audit on a paid plan returns a `history` block on the `/audit` response:
62
+
63
+ ```python
64
+ result = audit("https://example.com", api_key=key)
65
+ delta = result["history"].get("delta")
66
+ if delta:
67
+ print(f"Score change: {delta['score']:+.1f} ({delta.get('grade_change') or 'no grade change'})")
68
+ ```
69
+
70
+ Pull the full timeseries with `history()` or a one-shot per-domain summary with `history_domains()`. Retention windows: Starter 30 days, Basic 90 days, Pro 1 year, Ultra unlimited.
71
+
72
+ ## Webhook alerts on score drops
73
+
74
+ ```python
75
+ add_monitor(
76
+ "https://example.com",
77
+ api_key=key,
78
+ frequency="daily",
79
+ webhook_url="https://hooks.slack.com/services/T0/B0/xxxx",
80
+ alert_threshold=5,
81
+ )
82
+ ```
83
+
84
+ Slack incoming-webhook URLs are auto-formatted as Block Kit messages; any other https endpoint receives the raw event JSON.
85
+
86
+ ## Full Documentation
87
+
88
+ [seoscoreapi.com/docs](https://seoscoreapi.com/docs)
@@ -0,0 +1,70 @@
1
+ # seoscoreapi
2
+
3
+ Python client for [SEO Score API](https://seoscoreapi.com) — audit any URL for SEO issues with one function call.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ pip install seoscoreapi
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```python
14
+ from seoscoreapi import audit, signup
15
+
16
+ # Get a free API key (5 audits/day)
17
+ key = signup("you@example.com")
18
+
19
+ # Run an audit
20
+ result = audit("https://example.com", api_key=key)
21
+ print(f"Score: {result['score']}/100 ({result['grade']})")
22
+ ```
23
+
24
+ ## Functions
25
+
26
+ | Function | Description |
27
+ |---|---|
28
+ | `signup(email)` | Get a free API key |
29
+ | `audit(url, api_key)` | Run SEO audit on a URL |
30
+ | `batch_audit(urls, api_key)` | Audit up to 10 URLs in one call (paid) |
31
+ | `compare(urls, api_key)` | Compare 2–5 URLs with a structured diff (Basic+) |
32
+ | `competitive_audit(url, competitor_url, keyword, api_key)` | Head-to-head audit with gap score (Pro+) |
33
+ | `history(url, api_key, limit=100, since=None)` | Full audit timeseries + summary for a URL (Starter+) |
34
+ | `history_domains(api_key)` | Every domain audited by this key with latest score and 30-day trend (Starter+) |
35
+ | `usage(api_key)` | Check usage and limits |
36
+ | `add_monitor(url, api_key, frequency="daily", webhook_url=None, alert_threshold=5)` | Set up score monitoring with optional Slack/webhook alerts (paid) |
37
+ | `list_monitors(api_key)` | List active monitors |
38
+ | `scoreboard_opt_out(api_key, opt_out=True)` | Opt in or out of the public scoreboard |
39
+ | `report_url(domain)` | Get shareable report URL |
40
+
41
+ ## Historical tracking
42
+
43
+ Every audit on a paid plan returns a `history` block on the `/audit` response:
44
+
45
+ ```python
46
+ result = audit("https://example.com", api_key=key)
47
+ delta = result["history"].get("delta")
48
+ if delta:
49
+ print(f"Score change: {delta['score']:+.1f} ({delta.get('grade_change') or 'no grade change'})")
50
+ ```
51
+
52
+ Pull the full timeseries with `history()` or a one-shot per-domain summary with `history_domains()`. Retention windows: Starter 30 days, Basic 90 days, Pro 1 year, Ultra unlimited.
53
+
54
+ ## Webhook alerts on score drops
55
+
56
+ ```python
57
+ add_monitor(
58
+ "https://example.com",
59
+ api_key=key,
60
+ frequency="daily",
61
+ webhook_url="https://hooks.slack.com/services/T0/B0/xxxx",
62
+ alert_threshold=5,
63
+ )
64
+ ```
65
+
66
+ Slack incoming-webhook URLs are auto-formatted as Block Kit messages; any other https endpoint receives the raw event JSON.
67
+
68
+ ## Full Documentation
69
+
70
+ [seoscoreapi.com/docs](https://seoscoreapi.com/docs)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "seoscoreapi"
7
- version = "1.2.0"
7
+ version = "1.3.0"
8
8
  description = "Python client for SEO Score API — audit any URL for SEO issues with one function call"
9
9
  readme = "README.md"
10
10
  license = {text = "MIT"}
@@ -22,7 +22,7 @@ from typing import Optional
22
22
  import requests
23
23
 
24
24
  BASE_URL = "https://seoscoreapi.com"
25
- __version__ = "1.2.0"
25
+ __version__ = "1.3.0"
26
26
 
27
27
  _HEADERS = {"User-Agent": f"seoscoreapi-python/{__version__}"}
28
28
 
@@ -55,9 +55,24 @@ def usage(api_key: str) -> dict:
55
55
  return r.json()
56
56
 
57
57
 
58
- def add_monitor(url: str, api_key: str, frequency: str = "daily") -> dict:
59
- """Set up score monitoring for a URL (paid plans only)."""
60
- r = requests.post(f"{BASE_URL}/monitors", json={"url": url, "frequency": frequency}, headers={"X-API-Key": api_key, **_HEADERS})
58
+ def add_monitor(
59
+ url: str,
60
+ api_key: str,
61
+ frequency: str = "daily",
62
+ webhook_url: Optional[str] = None,
63
+ alert_threshold: int = 5,
64
+ ) -> dict:
65
+ """Set up score monitoring for a URL (paid plans only).
66
+
67
+ `webhook_url` (optional): receives a POST whenever the score drops
68
+ by `alert_threshold` points or more. Slack incoming-webhook URLs are
69
+ auto-formatted as Block Kit messages; any other https endpoint
70
+ receives the raw event JSON.
71
+ """
72
+ payload: dict = {"url": url, "frequency": frequency, "alert_threshold": alert_threshold}
73
+ if webhook_url:
74
+ payload["webhook_url"] = webhook_url
75
+ r = requests.post(f"{BASE_URL}/monitors", json=payload, headers={"X-API-Key": api_key, **_HEADERS})
61
76
  r.raise_for_status()
62
77
  return r.json()
63
78
 
@@ -76,6 +91,18 @@ def scoreboard_opt_out(api_key: str, opt_out: bool = True) -> dict:
76
91
  return r.json()
77
92
 
78
93
 
94
+ def compare(urls: list[str], api_key: str) -> dict:
95
+ """Compare 2–5 URLs side by side with a structured diff (Basic plan or higher).
96
+
97
+ Returns each URL's score and category breakdown plus a `diff`
98
+ object describing who is ahead and by how much, per category and
99
+ per URL pair.
100
+ """
101
+ r = requests.post(f"{BASE_URL}/compare", json={"urls": urls}, headers={"X-API-Key": api_key, **_HEADERS})
102
+ r.raise_for_status()
103
+ return r.json()
104
+
105
+
79
106
  def competitive_audit(url: str, competitor_url: str, keyword: str, api_key: str) -> dict:
80
107
  """Run a head-to-head competitive audit (Pro plan or higher). Returns gap score, per-check diffs, and action items."""
81
108
  r = requests.post(f"{BASE_URL}/audit/competitive", json={"url": url, "competitor_url": competitor_url, "keyword": keyword}, headers={"X-API-Key": api_key, **_HEADERS})
@@ -0,0 +1,88 @@
1
+ Metadata-Version: 2.4
2
+ Name: seoscoreapi
3
+ Version: 1.3.0
4
+ Summary: Python client for SEO Score API — audit any URL for SEO issues with one function call
5
+ Author-email: SEO Score API <info@seoscoreapi.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://seoscoreapi.com
8
+ Project-URL: Documentation, https://seoscoreapi.com/docs
9
+ Project-URL: Repository, https://github.com/avansledright/seoscoreapi.com
10
+ Keywords: seo,audit,api,seo-score,website-audit,seo-checker
11
+ Classifier: Development Status :: 5 - Production/Stable
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Programming Language :: Python :: 3
15
+ Requires-Python: >=3.8
16
+ Description-Content-Type: text/markdown
17
+ Requires-Dist: requests>=2.20
18
+
19
+ # seoscoreapi
20
+
21
+ Python client for [SEO Score API](https://seoscoreapi.com) — audit any URL for SEO issues with one function call.
22
+
23
+ ## Install
24
+
25
+ ```bash
26
+ pip install seoscoreapi
27
+ ```
28
+
29
+ ## Quick Start
30
+
31
+ ```python
32
+ from seoscoreapi import audit, signup
33
+
34
+ # Get a free API key (5 audits/day)
35
+ key = signup("you@example.com")
36
+
37
+ # Run an audit
38
+ result = audit("https://example.com", api_key=key)
39
+ print(f"Score: {result['score']}/100 ({result['grade']})")
40
+ ```
41
+
42
+ ## Functions
43
+
44
+ | Function | Description |
45
+ |---|---|
46
+ | `signup(email)` | Get a free API key |
47
+ | `audit(url, api_key)` | Run SEO audit on a URL |
48
+ | `batch_audit(urls, api_key)` | Audit up to 10 URLs in one call (paid) |
49
+ | `compare(urls, api_key)` | Compare 2–5 URLs with a structured diff (Basic+) |
50
+ | `competitive_audit(url, competitor_url, keyword, api_key)` | Head-to-head audit with gap score (Pro+) |
51
+ | `history(url, api_key, limit=100, since=None)` | Full audit timeseries + summary for a URL (Starter+) |
52
+ | `history_domains(api_key)` | Every domain audited by this key with latest score and 30-day trend (Starter+) |
53
+ | `usage(api_key)` | Check usage and limits |
54
+ | `add_monitor(url, api_key, frequency="daily", webhook_url=None, alert_threshold=5)` | Set up score monitoring with optional Slack/webhook alerts (paid) |
55
+ | `list_monitors(api_key)` | List active monitors |
56
+ | `scoreboard_opt_out(api_key, opt_out=True)` | Opt in or out of the public scoreboard |
57
+ | `report_url(domain)` | Get shareable report URL |
58
+
59
+ ## Historical tracking
60
+
61
+ Every audit on a paid plan returns a `history` block on the `/audit` response:
62
+
63
+ ```python
64
+ result = audit("https://example.com", api_key=key)
65
+ delta = result["history"].get("delta")
66
+ if delta:
67
+ print(f"Score change: {delta['score']:+.1f} ({delta.get('grade_change') or 'no grade change'})")
68
+ ```
69
+
70
+ Pull the full timeseries with `history()` or a one-shot per-domain summary with `history_domains()`. Retention windows: Starter 30 days, Basic 90 days, Pro 1 year, Ultra unlimited.
71
+
72
+ ## Webhook alerts on score drops
73
+
74
+ ```python
75
+ add_monitor(
76
+ "https://example.com",
77
+ api_key=key,
78
+ frequency="daily",
79
+ webhook_url="https://hooks.slack.com/services/T0/B0/xxxx",
80
+ alert_threshold=5,
81
+ )
82
+ ```
83
+
84
+ Slack incoming-webhook URLs are auto-formatted as Block Kit messages; any other https endpoint receives the raw event JSON.
85
+
86
+ ## Full Documentation
87
+
88
+ [seoscoreapi.com/docs](https://seoscoreapi.com/docs)
@@ -1,56 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: seoscoreapi
3
- Version: 1.2.0
4
- Summary: Python client for SEO Score API — audit any URL for SEO issues with one function call
5
- Author-email: SEO Score API <info@seoscoreapi.com>
6
- License: MIT
7
- Project-URL: Homepage, https://seoscoreapi.com
8
- Project-URL: Documentation, https://seoscoreapi.com/docs
9
- Project-URL: Repository, https://github.com/avansledright/seoscoreapi.com
10
- Keywords: seo,audit,api,seo-score,website-audit,seo-checker
11
- Classifier: Development Status :: 5 - Production/Stable
12
- Classifier: Intended Audience :: Developers
13
- Classifier: License :: OSI Approved :: MIT License
14
- Classifier: Programming Language :: Python :: 3
15
- Requires-Python: >=3.8
16
- Description-Content-Type: text/markdown
17
- Requires-Dist: requests>=2.20
18
-
19
- # seoscoreapi
20
-
21
- Python client for [SEO Score API](https://seoscoreapi.com) — audit any URL for SEO issues with one function call.
22
-
23
- ## Install
24
-
25
- ```bash
26
- pip install seoscoreapi
27
- ```
28
-
29
- ## Quick Start
30
-
31
- ```python
32
- from seoscoreapi import audit, signup
33
-
34
- # Get a free API key (5 audits/day)
35
- key = signup("you@example.com")
36
-
37
- # Run an audit
38
- result = audit("https://example.com", api_key=key)
39
- print(f"Score: {result['score']}/100 ({result['grade']})")
40
- ```
41
-
42
- ## Functions
43
-
44
- | Function | Description |
45
- |---|---|
46
- | `signup(email)` | Get a free API key |
47
- | `audit(url, api_key)` | Run SEO audit on a URL |
48
- | `batch_audit(urls, api_key)` | Audit multiple URLs (paid) |
49
- | `usage(api_key)` | Check usage and limits |
50
- | `add_monitor(url, api_key)` | Set up score monitoring (paid) |
51
- | `list_monitors(api_key)` | List active monitors |
52
- | `report_url(domain)` | Get shareable report URL |
53
-
54
- ## Full Documentation
55
-
56
- [seoscoreapi.com/docs](https://seoscoreapi.com/docs)
@@ -1,38 +0,0 @@
1
- # seoscoreapi
2
-
3
- Python client for [SEO Score API](https://seoscoreapi.com) — audit any URL for SEO issues with one function call.
4
-
5
- ## Install
6
-
7
- ```bash
8
- pip install seoscoreapi
9
- ```
10
-
11
- ## Quick Start
12
-
13
- ```python
14
- from seoscoreapi import audit, signup
15
-
16
- # Get a free API key (5 audits/day)
17
- key = signup("you@example.com")
18
-
19
- # Run an audit
20
- result = audit("https://example.com", api_key=key)
21
- print(f"Score: {result['score']}/100 ({result['grade']})")
22
- ```
23
-
24
- ## Functions
25
-
26
- | Function | Description |
27
- |---|---|
28
- | `signup(email)` | Get a free API key |
29
- | `audit(url, api_key)` | Run SEO audit on a URL |
30
- | `batch_audit(urls, api_key)` | Audit multiple URLs (paid) |
31
- | `usage(api_key)` | Check usage and limits |
32
- | `add_monitor(url, api_key)` | Set up score monitoring (paid) |
33
- | `list_monitors(api_key)` | List active monitors |
34
- | `report_url(domain)` | Get shareable report URL |
35
-
36
- ## Full Documentation
37
-
38
- [seoscoreapi.com/docs](https://seoscoreapi.com/docs)
@@ -1,56 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: seoscoreapi
3
- Version: 1.2.0
4
- Summary: Python client for SEO Score API — audit any URL for SEO issues with one function call
5
- Author-email: SEO Score API <info@seoscoreapi.com>
6
- License: MIT
7
- Project-URL: Homepage, https://seoscoreapi.com
8
- Project-URL: Documentation, https://seoscoreapi.com/docs
9
- Project-URL: Repository, https://github.com/avansledright/seoscoreapi.com
10
- Keywords: seo,audit,api,seo-score,website-audit,seo-checker
11
- Classifier: Development Status :: 5 - Production/Stable
12
- Classifier: Intended Audience :: Developers
13
- Classifier: License :: OSI Approved :: MIT License
14
- Classifier: Programming Language :: Python :: 3
15
- Requires-Python: >=3.8
16
- Description-Content-Type: text/markdown
17
- Requires-Dist: requests>=2.20
18
-
19
- # seoscoreapi
20
-
21
- Python client for [SEO Score API](https://seoscoreapi.com) — audit any URL for SEO issues with one function call.
22
-
23
- ## Install
24
-
25
- ```bash
26
- pip install seoscoreapi
27
- ```
28
-
29
- ## Quick Start
30
-
31
- ```python
32
- from seoscoreapi import audit, signup
33
-
34
- # Get a free API key (5 audits/day)
35
- key = signup("you@example.com")
36
-
37
- # Run an audit
38
- result = audit("https://example.com", api_key=key)
39
- print(f"Score: {result['score']}/100 ({result['grade']})")
40
- ```
41
-
42
- ## Functions
43
-
44
- | Function | Description |
45
- |---|---|
46
- | `signup(email)` | Get a free API key |
47
- | `audit(url, api_key)` | Run SEO audit on a URL |
48
- | `batch_audit(urls, api_key)` | Audit multiple URLs (paid) |
49
- | `usage(api_key)` | Check usage and limits |
50
- | `add_monitor(url, api_key)` | Set up score monitoring (paid) |
51
- | `list_monitors(api_key)` | List active monitors |
52
- | `report_url(domain)` | Get shareable report URL |
53
-
54
- ## Full Documentation
55
-
56
- [seoscoreapi.com/docs](https://seoscoreapi.com/docs)
File without changes