seoscoreapi 1.1.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.1.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"}
@@ -0,0 +1,132 @@
1
+ """
2
+ SEO Score API - Python Client
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+
5
+ Audit any URL for SEO issues with one function call.
6
+
7
+ Usage:
8
+ from seoscoreapi import audit, signup
9
+
10
+ # Get a free API key
11
+ key = signup("you@example.com")
12
+
13
+ # Run an audit
14
+ result = audit("https://example.com", api_key=key)
15
+ print(f"Score: {result['score']}/100 ({result['grade']})")
16
+
17
+ Full docs: https://seoscoreapi.com/docs
18
+ """
19
+
20
+ from typing import Optional
21
+
22
+ import requests
23
+
24
+ BASE_URL = "https://seoscoreapi.com"
25
+ __version__ = "1.3.0"
26
+
27
+ _HEADERS = {"User-Agent": f"seoscoreapi-python/{__version__}"}
28
+
29
+
30
+ def signup(email: str) -> str:
31
+ """Sign up for a free API key. Returns the raw key (save it — shown only once)."""
32
+ r = requests.post(f"{BASE_URL}/signup", json={"email": email}, headers=_HEADERS)
33
+ r.raise_for_status()
34
+ return r.json()["api_key"]
35
+
36
+
37
+ def audit(url: str, api_key: str) -> dict:
38
+ """Run an SEO audit on a URL. Returns score, grade, checks, and priorities."""
39
+ r = requests.get(f"{BASE_URL}/audit", params={"url": url}, headers={"X-API-Key": api_key, **_HEADERS})
40
+ r.raise_for_status()
41
+ return r.json()
42
+
43
+
44
+ def batch_audit(urls: list[str], api_key: str) -> dict:
45
+ """Audit multiple URLs (paid plans only). Returns list of results."""
46
+ r = requests.post(f"{BASE_URL}/audit/batch", json={"urls": urls}, headers={"X-API-Key": api_key, **_HEADERS})
47
+ r.raise_for_status()
48
+ return r.json()
49
+
50
+
51
+ def usage(api_key: str) -> dict:
52
+ """Check your API usage and limits."""
53
+ r = requests.get(f"{BASE_URL}/usage", headers={"X-API-Key": api_key, **_HEADERS})
54
+ r.raise_for_status()
55
+ return r.json()
56
+
57
+
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})
76
+ r.raise_for_status()
77
+ return r.json()
78
+
79
+
80
+ def list_monitors(api_key: str) -> list:
81
+ """List your active monitors."""
82
+ r = requests.get(f"{BASE_URL}/monitors", headers={"X-API-Key": api_key, **_HEADERS})
83
+ r.raise_for_status()
84
+ return r.json()["monitors"]
85
+
86
+
87
+ def scoreboard_opt_out(api_key: str, opt_out: bool = True) -> dict:
88
+ """Opt in or out of the public SEO scoreboard."""
89
+ r = requests.put(f"{BASE_URL}/scoreboard/opt-out", params={"opt_out": str(opt_out).lower()}, headers={"X-API-Key": api_key, **_HEADERS})
90
+ r.raise_for_status()
91
+ return r.json()
92
+
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
+
106
+ def competitive_audit(url: str, competitor_url: str, keyword: str, api_key: str) -> dict:
107
+ """Run a head-to-head competitive audit (Pro plan or higher). Returns gap score, per-check diffs, and action items."""
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})
109
+ r.raise_for_status()
110
+ return r.json()
111
+
112
+
113
+ def report_url(domain: str) -> str:
114
+ """Get the shareable report URL for a domain."""
115
+ return f"{BASE_URL}/report/{domain}"
116
+
117
+
118
+ def history(url: str, api_key: str, limit: int = 100, since: Optional[float] = None) -> dict:
119
+ """Get historical audit scores and trend summary for a URL (Starter plan or higher)."""
120
+ params: dict = {"url": url, "limit": limit}
121
+ if since is not None:
122
+ params["since"] = since
123
+ r = requests.get(f"{BASE_URL}/history", params=params, headers={"X-API-Key": api_key, **_HEADERS})
124
+ r.raise_for_status()
125
+ return r.json()
126
+
127
+
128
+ def history_domains(api_key: str) -> list:
129
+ """List every domain audited by this key with latest score and 30-day trend (Starter plan or higher)."""
130
+ r = requests.get(f"{BASE_URL}/history/domains", headers={"X-API-Key": api_key, **_HEADERS})
131
+ r.raise_for_status()
132
+ return r.json()["domains"]
@@ -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.1.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,79 +0,0 @@
1
- """
2
- SEO Score API - Python Client
3
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
-
5
- Audit any URL for SEO issues with one function call.
6
-
7
- Usage:
8
- from seoscoreapi import audit, signup
9
-
10
- # Get a free API key
11
- key = signup("you@example.com")
12
-
13
- # Run an audit
14
- result = audit("https://example.com", api_key=key)
15
- print(f"Score: {result['score']}/100 ({result['grade']})")
16
-
17
- Full docs: https://seoscoreapi.com/docs
18
- """
19
-
20
- import requests
21
-
22
- BASE_URL = "https://seoscoreapi.com"
23
- __version__ = "1.1.0"
24
-
25
- _HEADERS = {"User-Agent": f"seoscoreapi-python/{__version__}"}
26
-
27
-
28
- def signup(email: str) -> str:
29
- """Sign up for a free API key. Returns the raw key (save it — shown only once)."""
30
- r = requests.post(f"{BASE_URL}/signup", json={"email": email}, headers=_HEADERS)
31
- r.raise_for_status()
32
- return r.json()["api_key"]
33
-
34
-
35
- def audit(url: str, api_key: str) -> dict:
36
- """Run an SEO audit on a URL. Returns score, grade, checks, and priorities."""
37
- r = requests.get(f"{BASE_URL}/audit", params={"url": url}, headers={"X-API-Key": api_key, **_HEADERS})
38
- r.raise_for_status()
39
- return r.json()
40
-
41
-
42
- def batch_audit(urls: list[str], api_key: str) -> dict:
43
- """Audit multiple URLs (paid plans only). Returns list of results."""
44
- r = requests.post(f"{BASE_URL}/audit/batch", json={"urls": urls}, headers={"X-API-Key": api_key, **_HEADERS})
45
- r.raise_for_status()
46
- return r.json()
47
-
48
-
49
- def usage(api_key: str) -> dict:
50
- """Check your API usage and limits."""
51
- r = requests.get(f"{BASE_URL}/usage", headers={"X-API-Key": api_key, **_HEADERS})
52
- r.raise_for_status()
53
- return r.json()
54
-
55
-
56
- def add_monitor(url: str, api_key: str, frequency: str = "daily") -> dict:
57
- """Set up score monitoring for a URL (paid plans only)."""
58
- r = requests.post(f"{BASE_URL}/monitors", json={"url": url, "frequency": frequency}, headers={"X-API-Key": api_key, **_HEADERS})
59
- r.raise_for_status()
60
- return r.json()
61
-
62
-
63
- def list_monitors(api_key: str) -> list:
64
- """List your active monitors."""
65
- r = requests.get(f"{BASE_URL}/monitors", headers={"X-API-Key": api_key, **_HEADERS})
66
- r.raise_for_status()
67
- return r.json()["monitors"]
68
-
69
-
70
- def scoreboard_opt_out(api_key: str, opt_out: bool = True) -> dict:
71
- """Opt in or out of the public SEO scoreboard."""
72
- r = requests.put(f"{BASE_URL}/scoreboard/opt-out", params={"opt_out": str(opt_out).lower()}, headers={"X-API-Key": api_key, **_HEADERS})
73
- r.raise_for_status()
74
- return r.json()
75
-
76
-
77
- def report_url(domain: str) -> str:
78
- """Get the shareable report URL for a domain."""
79
- return f"{BASE_URL}/report/{domain}"
@@ -1,56 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: seoscoreapi
3
- Version: 1.1.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