Repository navigation
Expand file tree
/
Copy pathfeed.json
More file actions
1882 lines (1882 loc) · 96.3 KB
/
Copy pathfeed.json
File metadata and controls
1882 lines (1882 loc) · 96.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"feed_version": 1,
"generated_at": "2026-11-08T19:55:12Z",
"source": {
"repository": "geonodecom/geonode-integrations-management",
"revision": "018e46c"
},
"categories": [
{
"id": "ai-agents",
"label": "AI & Agents"
},
{
"id": "sdks",
"label": "SDKs"
},
{
"id": "frameworks",
"label": "Frameworks"
},
{
"id": "automation",
"label": "Automation"
},
{
"id": "api",
"label": "API"
},
{
"id": "cli",
"label": "CLI"
}
],
"lifecycle_labels": {
"published": "Available",
"private": "Private app",
"planned": "Coming soon",
"audit-required": "In review"
},
"integrations": [
{
"schema_version": 1,
"id": "api",
"slug": "api",
"name": "REST API",
"category": "api",
"summary": "Extract pages, crawl sites and search the web over HTTP.",
"seo_title": "Geonode Scraper API — Web Scraping, Crawling & Search",
"developer_overview": {
"connection": [
{
"label": "Base URL",
"value": "https://scraper.geonode.io"
},
{
"label": "Authentication",
"value": "X-Api-Key: <your-api-key>"
},
{
"label": "Request format",
"value": "application/json"
}
],
"operations": [
{
"name": "Extract",
"method": "POST",
"path": "/v1/extract",
"input": "A URL, output formats and optional browser rendering.",
"output": "Markdown or HTML with metadata; a job ID in async mode.",
"docs": "https://docs.geonode.com/docs/scraper-api/v1/extraction/extract-content"
},
{
"name": "Batch",
"method": "POST",
"path": "/v1/batch",
"input": "A list of URLs and extraction options.",
"output": "A job ID and accepted URL count. Retrieve results when complete.",
"docs": "https://docs.geonode.com/docs/scraper-api/v1/batch/start-batch-job"
},
{
"name": "Crawl",
"method": "POST",
"path": "/v1/crawl",
"input": "A seed URL, maximum depth and page limit.",
"output": "A job ID. Retrieve extracted pages as the crawl completes.",
"docs": "https://docs.geonode.com/docs/scraper-api/v1/crawl/start-crawl-job"
},
{
"name": "Map",
"method": "POST",
"path": "/v1/map",
"input": "A base URL and optional discovery filters.",
"output": "Discovered URLs and their sources, without page content.",
"docs": "https://docs.geonode.com/docs/scraper-api/v1/map/map-urls"
},
{
"name": "Search",
"method": "POST",
"path": "/v1/search",
"input": "A query, with optional locale, page and search filters.",
"output": "Search results, suggestions and a search job ID.",
"docs": "https://docs.geonode.com/docs/scraper-api/v1/search/start-search-job"
}
],
"behavior": [
{
"title": "Synchronous requests and background jobs",
"description": "Extraction supports sync and async modes. Batch and crawl return a job ID; poll for completion and paginate results. Webhooks can notify your service when a job finishes.",
"docs": "https://docs.geonode.com/docs/scraper-api/guides/jobs/02_checking_job_status",
"link_label": "Job lifecycle"
},
{
"title": "Rendering and usage",
"description": "Enable render_js when the page requires a browser. Rendering is slower and uses more credits. Keep API keys on your server; usage is charged to your Geonode account.",
"docs": "https://docs.geonode.com/docs/scraper-api/v1/extraction/extract-content",
"link_label": "Extraction options"
},
{
"title": "Errors and retries",
"description": "Handle authentication, validation and balance errors explicitly. Respect Retry-After on rate limits. A timed-out submission may still have created a job; avoid blindly submitting it again.",
"docs": "https://docs.geonode.com/docs/scraper-api/troubleshooting/error-handling",
"link_label": "Error handling"
}
]
},
"description": "Send JSON requests from your backend. Get Markdown, HTML or URLs back directly, or retrieve results from a background job.",
"lifecycle": "published",
"platform_verification": "not-applicable",
"platform": "HTTP",
"version": null,
"runtime": "HTTPS client",
"last_verified": "2026-10-22",
"verification": {
"package": "not-applicable",
"connection": "not-tested",
"note": "Official API documentation is available. Authenticated requests have not been run in this review. Capability copy checked against the official API reference and the developer-docs OpenAPI contract on 2026-10-22; this was a documentation review, not an authenticated execution test. Endpoint inputs, outputs and modes reviewed against the developer-docs OpenAPI contract on 2026-10-22.",
"evidence": [
"https://docs.geonode.com/docs/scraper-api/v1/reference"
]
},
"capabilities": {
"confirmed": [
"Extract webpage content as Markdown or HTML.",
"Process multiple URLs together with batch extraction.",
"Crawl a website and retrieve the resulting pages.",
"Discover website URLs before choosing what to extract.",
"Search the web for pages relevant to your query.",
"Track background jobs and receive completion notifications through webhooks."
],
"planned": []
},
"auth": {
"supported": [
"api-key"
],
"oauth_status": "not-supported",
"note": "Keep API keys on the server or in your client’s credential store. Usage is charged to your Geonode plan."
},
"installation": {
"command": null,
"status": "documented",
"note": "Use the official setup documentation."
},
"links": {
"website": "https://geonode.com/integrations/api",
"docs": "https://docs.geonode.com/docs/scraper-api/v1/reference",
"source": null,
"package": null,
"changelog": null,
"support": "https://geonode.com/contact"
},
"use_cases": [
{
"title": "Build with your own stack",
"description": "Use standard HTTP requests from a language or platform of your choice."
},
{
"title": "Connect a custom service",
"description": "Integrate asynchronous extraction and completion webhooks into your service."
}
],
"prerequisites": [
"HTTPS client",
"A Geonode API key and an active plan for authenticated requests."
],
"troubleshooting": [
{
"question": "My API key is not accepted.",
"answer": "Check the key in the Geonode dashboard and send it using X-Api-Key. Keep it out of browser bundles, URLs and version control."
},
{
"question": "The request is rate limited.",
"answer": "Respect the Retry-After response and your plan’s concurrency limits. Avoid automatically retrying a job submission when its outcome is unknown."
}
],
"related": [
"python",
"typescript",
"cli"
],
"logo": null,
"guide": {
"intro": "Call the Geonode Scraper API directly from any HTTP client. Use this route when your language has no dedicated SDK or you want to control the request and response handling yourself.",
"sections": [
{
"title": "Make one synchronous request",
"paragraphs": [
"Provide your API key through GEONODE_SCRAPER_API_KEY in the environment. Send JSON to the extraction endpoint with the X-Api-Key header."
],
"code": {
"label": "CURL · EXTRACT MARKDOWN",
"value": "curl --request POST \"https://scraper.geonode.io/v1/extract\" \\\n --header \"Content-Type: application/json\" \\\n --header \"X-Api-Key: ${GEONODE_SCRAPER_API_KEY}\" \\\n --data '{\"url\":\"https://example.com\",\"formats\":[\"markdown\"],\"processing_mode\":\"sync\"}'"
},
"expected": "A successful synchronous extraction returns page content under data.markdown and usage under tokens_charged. Read the HTTP status and error body before treating a response as a result."
},
{
"title": "Design for jobs and usage limits",
"steps": [
"Use asynchronous extraction, batches or crawls for longer work. Save the returned job ID and follow its status to completion, failure or cancellation.",
"Set explicit page and depth limits on crawls and paginate result sets.",
"Handle rate limits using Retry-After. Avoid resubmitting a job blindly if the original request timed out after submission.",
"If you use webhooks, validate signatures and handle duplicate deliveries before updating downstream records."
]
}
]
}
},
{
"schema_version": 1,
"id": "mcp",
"slug": "mcp",
"name": "Geonode MCP Server",
"category": "ai-agents",
"summary": "Web search and content collection for MCP-compatible agents.",
"seo_title": "Geonode MCP Server — Web Scraping for AI Assistants",
"description": "Give MCP-compatible AI assistants web search and content collection tools. Extract pages, discover URLs, crawl sites and run batches for research and downstream analysis. Geonode offers limited keyless page extraction; an API key enables the full toolset, including JavaScript rendering and country targeting.",
"lifecycle": "published",
"platform_verification": "not-applicable",
"platform": "Streamable HTTP",
"version": "1.0.1",
"runtime": "Compatible remote MCP client",
"last_verified": "2026-10-29",
"verification": {
"package": "not-applicable",
"connection": "not-tested",
"note": "1.0.1 checked on 2026-10-29 at https://mcp.geonode.com/mcp and https://scraper.geonode.io/mcp (health, initialize and keyless tool discovery, 16 tools). The MCP Registry entry is com.geonode/mcp 1.0.1; io.geonode/scraper is deprecated with a pointer to it. Native client tool exposure, automatic selection and authenticated execution remain untested.",
"evidence": [
"https://docs.geonode.com/docs/scraper-api/guides/mcp/00_overview",
"https://registry.modelcontextprotocol.io/v0.1/servers/com.geonode%2Fmcp/versions/latest",
"https://mcp.geonode.com/mcp",
"https://scraper.geonode.io/mcp"
]
},
"capabilities": {
"confirmed": [
"Extract webpage content from a compatible AI assistant or coding tool.",
"Try basic synchronous page extraction without an API key, within anonymous limits.",
"Use an API key for URL discovery, crawls, web search and batch jobs.",
"Access JavaScript rendering and country targeting with authenticated requests.",
"Monitor long-running extraction and crawl jobs from your MCP client."
],
"planned": []
},
"auth": {
"supported": [
"api-key",
"anonymous-extract"
],
"oauth_status": "planned",
"note": "API key recommended for the full toolset. Keyless synchronous extraction is also documented: 5 requests/minute, 1 concurrent request and 100 MB/day; no JavaScript rendering or country targeting."
},
"installation": {
"command": null,
"status": "documented",
"note": "Use the official setup documentation."
},
"links": {
"website": "https://geonode.com/integrations/mcp",
"docs": "https://docs.geonode.com/docs/scraper-api/guides/mcp/00_overview",
"source": "https://github.com/geonodecom/mcp",
"source_visibility": "public",
"package": null,
"changelog": null,
"support": "https://geonode.com/contact"
},
"use_cases": [
{
"title": "Turn a page into context",
"description": "Extract a page as Markdown for your assistant to read."
},
{
"title": "Research from your editor",
"description": "Let your assistant find and work with web data without switching tools."
}
],
"prerequisites": [
"A client supporting remote Streamable HTTP MCP.",
"A Geonode API key for tools beyond anonymous page extraction."
],
"troubleshooting": [
{
"question": "My API key is not accepted.",
"answer": "Check the key in the Geonode dashboard and send it using X-Api-Key. Keep it out of browser bundles, URLs and version control."
},
{
"question": "The request is rate limited.",
"answer": "Respect the Retry-After response and your plan’s concurrency limits. Avoid automatically retrying a job submission when its outcome is unknown."
}
],
"related": [
"python",
"skills",
"langchain"
],
"logo": "assets/mcp.svg",
"guide": {
"intro": "Connect a compatible AI assistant to Geonode over remote Streamable HTTP. The assistant discovers tools through MCP and calls them on your behalf; you do not need to install a Python SDK for this hosted connection.",
"sections": [
{
"title": "Check the connection with one page",
"steps": [
"Add https://scraper.geonode.io/mcp as a remote HTTP MCP server in your client, using the client-specific Geonode guide.",
"Refresh the client's tools. Without an API key, the server exposes the extract tool.",
"Ask: “Use Geonode to extract https://example.com as Markdown, then summarize what the page says.”",
"Inspect the tool result in your client. A successful connection check alone does not confirm that a page was extracted."
]
},
{
"title": "Move from keyless evaluation to your account",
"paragraphs": [
"Anonymous extraction is synchronous, with documented limits of five requests per minute, one concurrent request and 100 MB per day. JavaScript rendering and country targeting require authentication.",
"For account-backed access, configure X-Api-Key through your client's secure header or credential setting. Your plan's usage limits then apply. The client-specific guides describe where to configure the header."
],
"links": [
{
"label": "Geonode keyless MCP guide",
"url": "https://docs.geonode.com/docs/scraper-api/guides/mcp/01_use-without-an-api-key"
},
{
"label": "Geonode MCP prerequisites",
"url": "https://docs.geonode.com/docs/scraper-api/guides/mcp/01_before-you-start"
}
]
},
{
"title": "Hosted service and local adapters",
"paragraphs": [
"The verified connection is the hosted remote endpoint. A local launcher or supported self-hosted adapter is a separate future delivery; the hosted API and scraping infrastructure are not included in an SDK installation."
]
}
]
}
},
{
"schema_version": 1,
"id": "cli",
"slug": "cli",
"name": "CLI",
"category": "cli",
"summary": "Search, crawl and extract web data from your terminal.",
"seo_title": "Geonode CLI — Web Scraping, Crawling & Search",
"description": "Collect web data from your terminal for scripts, agents and data pipelines. Extract pages, crawl sites, discover URLs, search the web and run batches with the Geonode CLI. JSON output and exit codes make the results easy to use in your own automation.",
"lifecycle": "published",
"platform_verification": "not-applicable",
"platform": "Terminal",
"version": "0.2.3",
"runtime": "Python 3.10+",
"last_verified": "2026-10-29",
"verification": {
"package": "verified",
"connection": "not-tested",
"note": "0.2.3 released on 2026-10-29 from geonodecom/cli by its Publish workflow with trusted publishing; registry metadata, provenance and a clean install were checked signed out. Package publication and local imports verified. Authenticated extraction has not been tested in this review. Capability descriptions reviewed against repository source on 2026-10-21; no new authenticated execution test.",
"evidence": [
"https://pypi.org/pypi/geonode-scraper-cli/0.2.3/json",
"https://pypi.org/integrity/geonode-scraper-cli/0.2.3/geonode_scraper_cli-0.2.3-py3-none-any.whl/provenance",
"https://pypi.org/pypi/geonode-scraper-cli/json"
]
},
"capabilities": {
"confirmed": [
"Extract Markdown or HTML with gscraper extract.",
"Run batch, crawl, map and search commands from scripts.",
"Return JSON envelopes and exit codes for automation."
],
"planned": []
},
"auth": {
"supported": [
"api-key"
],
"oauth_status": "not-supported",
"note": "Keep API keys on the server or in your client’s credential store. Usage is charged to your Geonode plan."
},
"installation": {
"command": "pipx install geonode-scraper-cli==0.2.3",
"status": "package-verified",
"note": "Uses the existing published package name. No package rename is required."
},
"links": {
"website": "https://geonode.com/integrations/cli",
"docs": "https://docs.geonode.com/docs/scraper-api/guides/sdks/cli",
"source": "https://github.com/geonodecom/cli",
"source_visibility": "public",
"package": "https://pypi.org/project/geonode-scraper-cli/",
"changelog": "https://pypi.org/project/geonode-scraper-cli/",
"support": "https://geonode.com/contact"
},
"use_cases": [
{
"title": "Schedule a content refresh",
"description": "Run extraction commands from your scheduler, inspect exit codes, and save JSON results."
},
{
"title": "Inspect a site from the terminal",
"description": "Map URLs, select pages and extract Markdown without writing an API client."
}
],
"prerequisites": [
"Python 3.10+",
"A Geonode API key and an active plan for authenticated requests."
],
"troubleshooting": [
{
"question": "My API key is not accepted.",
"answer": "Check the key in the Geonode dashboard and send it using X-Api-Key. Keep it out of browser bundles, URLs and version control."
},
{
"question": "The request is rate limited.",
"answer": "Respect the Retry-After response and your plan’s concurrency limits. Avoid automatically retrying a job submission when its outcome is unknown."
}
],
"related": [
"python",
"api",
"mcp"
],
"logo": null,
"guide": {
"intro": "gscraper is the Geonode command-line interface. Use it for one-off extraction, shell scripts, batches and crawls without writing an application.",
"sections": [
{
"title": "Check the installation and extract a page",
"paragraphs": [
"Set GEONODE_SCRAPER_API_KEY through your environment or the CLI config file. Run the commands below after installation. Avoid putting a real key into command-line flags or committed files."
],
"code": {
"label": "TERMINAL",
"value": "gscraper --help\ngscraper extract https://example.com --format markdown"
},
"expected": "The help command lists the available commands. A successful extraction prints a readable result; use --json when a script needs the structured response."
},
{
"title": "Use the result in a script",
"code": {
"label": "TERMINAL · JSON OUTPUT",
"value": "gscraper extract https://example.com --format markdown --json"
},
"paragraphs": [
"Read ok before consuming result.data.markdown. Failures include an error object with status, code, message and retryable. The CLI also provides exit codes so scripts can detect failure without parsing a human-readable message."
]
},
{
"title": "Run larger jobs",
"code": {
"label": "TERMINAL · EXAMPLES",
"value": "gscraper map run https://example.com --search pricing\ngscraper batch create https://example.com https://example.org --format markdown\ngscraper batch wait JOB_ID\ngscraper usage concurrency"
},
"paragraphs": [
"Replace JOB_ID with the ID returned by the batch command. Use per-command --help to inspect timeout and polling options before putting a command into a scheduled workflow."
]
},
{
"title": "Resolve configuration problems",
"paragraphs": [
"Flags override environment variables, which override the config file. Use gscraper config path to locate the TOML file and gscraper config show to inspect settings with keys masked. If the command is missing on Windows, check the Python Scripts directory on PATH or install through pipx."
]
}
]
}
},
{
"schema_version": 1,
"id": "python",
"slug": "sdk-python",
"name": "Python SDK",
"category": "sdks",
"summary": "Typed Python clients for web research and data pipelines.",
"seo_title": "Geonode Python SDK — Web Scraping & Data Extraction",
"description": "Build Python agents and data pipelines with Geonode’s typed clients. Extract pages, crawl sites, discover URLs, search the web and run batches. Use returned content in your own research and RAG workflows, with webhook subscriptions and usage statistics available from your code.",
"lifecycle": "published",
"platform_verification": "not-applicable",
"platform": "Python",
"version": "0.6.2",
"runtime": "Python 3.10+",
"last_verified": "2026-10-29",
"verification": {
"package": "verified",
"connection": "not-tested",
"note": "0.6.2 released on 2026-10-29 from geonodecom/sdk-python by its Publish workflow with trusted publishing; registry metadata, provenance and a clean install were checked signed out. Package publication and local imports verified. Authenticated extraction has not been tested in this review. Capability descriptions reviewed against repository source on 2026-10-21; no new authenticated execution test.",
"evidence": [
"https://pypi.org/pypi/geonode-scraper-sdk/0.6.2/json",
"https://pypi.org/integrity/geonode-scraper-sdk/0.6.2/geonode_scraper_sdk-0.6.2-py3-none-any.whl/provenance",
"https://pypi.org/pypi/geonode-scraper-sdk/json"
]
},
"capabilities": {
"confirmed": [
"Extract page content as Markdown or HTML, with optional JavaScript rendering.",
"Run batch extraction and bounded website crawls as background jobs.",
"Discover website URLs before choosing which pages to extract.",
"Search the web, receive job notifications through webhooks and inspect API usage."
],
"planned": []
},
"auth": {
"supported": [
"api-key"
],
"oauth_status": "not-supported",
"note": "Keep API keys on the server or in your client’s credential store. Usage is charged to your Geonode plan."
},
"installation": {
"command": "pip install geonode-scraper-sdk==0.6.2",
"status": "package-verified",
"note": "Uses the existing published package name. No package rename is required."
},
"links": {
"website": "https://geonode.com/integrations/sdk-python",
"docs": "https://docs.geonode.com/docs/scraper-api/guides/sdks/python",
"source": "https://github.com/geonodecom/sdk-python",
"source_visibility": "public",
"package": "https://pypi.org/project/geonode-scraper-sdk/",
"changelog": "https://pypi.org/project/geonode-scraper-sdk/",
"support": "https://geonode.com/contact"
},
"use_cases": [
{
"title": "Prepare documents for retrieval",
"description": "Extract Markdown from selected URLs, then pass it to your own chunking, embedding and storage pipeline."
},
{
"title": "Refresh a website dataset",
"description": "Crawl with depth and page limits, inspect results, and save content with its source URL."
}
],
"prerequisites": [
"Python 3.10+",
"A Geonode API key and an active plan for authenticated requests."
],
"troubleshooting": [
{
"question": "My API key is not accepted.",
"answer": "Check the key in the Geonode dashboard and send it using X-Api-Key. Keep it out of browser bundles, URLs and version control."
},
{
"question": "The request is rate limited.",
"answer": "Respect the Retry-After response and your plan’s concurrency limits. Avoid automatically retrying a job submission when its outcome is unknown."
}
],
"related": [
"typescript",
"cli",
"langchain"
],
"logo": "assets/python.svg",
"guide": {
"intro": "Use the Python SDK when your application needs typed requests and responses for the Geonode Scraper API. The client sends your API key and uses the production endpoint by default.",
"sections": [
{
"title": "Extract your first page",
"paragraphs": [
"Set GEONODE_SCRAPER_API_KEY in the environment, then run this script with Python 3.10 or newer. The context manager closes the API client when the request finishes."
],
"code": {
"label": "PYTHON · SYNCHRONOUS EXTRACTION",
"value": "import os\nfrom geonode_scraper_sdk import (\n Configuration, ApiClient, ExtractionApi, ExtractRequest, OutputFormat,\n)\n\nconfiguration = Configuration(\n api_key={\"ApiKeyAuth\": os.environ[\"GEONODE_SCRAPER_API_KEY\"]}\n)\nwith ApiClient(configuration) as api_client:\n response = ExtractionApi(api_client).extract_v1_extract_post(\n ExtractRequest(\n url=\"https://example.com\",\n formats=[OutputFormat.MARKDOWN],\n )\n )\n print(response.data.markdown)\n print(response.tokens_charged)"
},
"expected": "A successful response contains the page in data.markdown and the request cost in tokens_charged. The example waits for the extraction to finish."
},
{
"title": "Expand the workflow",
"steps": [
"Use BatchApi to extract a list of URLs or CrawlApi to follow links from a seed page with depth and page limits.",
"Use MapApi to discover URLs before extracting them, or SearchApi to find candidate pages.",
"Use background processing for longer jobs. Store the returned job_id, poll its status with a bounded timeout, and handle completed, failed and cancelled states.",
"Read paginated results page by page. A single status response may contain only part of a batch or crawl."
]
},
{
"title": "When a request fails",
"paragraphs": [
"Check authentication for HTTP 401 and plan balance for 402. Respect Retry-After on 429. Inspect the error body for validation or extraction failures before retrying. A network timeout after submitting a job does not prove that the job was never created."
],
"links": [
{
"label": "Geonode API error handling",
"url": "https://docs.geonode.com/docs/scraper-api/troubleshooting/error-handling"
}
]
}
]
}
},
{
"schema_version": 1,
"id": "typescript",
"slug": "sdk-typescript",
"name": "TypeScript SDK",
"category": "sdks",
"summary": "Typed web data access for JavaScript and TypeScript agents.",
"seo_title": "Geonode TypeScript SDK — Web Scraping & Data Extraction",
"description": "Build server-side JavaScript and TypeScript agents with Geonode’s typed clients. Extract pages, crawl sites, discover URLs, search the web and run batches. Feed results into your AI features and data workflows, with webhook subscriptions and usage statistics available from your code.",
"lifecycle": "published",
"platform_verification": "not-applicable",
"platform": "TypeScript",
"version": "0.6.2",
"runtime": "Node.js 18+",
"last_verified": "2026-10-29",
"verification": {
"package": "verified",
"connection": "not-tested",
"note": "0.6.2 released on 2026-10-29 from geonodecom/sdk-typescript by its Publish workflow with trusted publishing; registry metadata, provenance and a clean install were checked signed out. Package publication and local imports verified. Authenticated extraction has not been tested in this review. Capability descriptions reviewed against repository source on 2026-10-21; no new authenticated execution test.",
"evidence": [
"https://registry.npmjs.org/@geonode_scraper%2fscraper-sdk/0.6.2",
"https://registry.npmjs.org/-/npm/v1/attestations/@geonode_scraper%2fscraper-sdk@0.6.2",
"https://registry.npmjs.org/@geonode_scraper%2fscraper-sdk"
]
},
"capabilities": {
"confirmed": [
"Extract page content as Markdown or HTML, with optional JavaScript rendering.",
"Run batch extraction and bounded website crawls as background jobs.",
"Discover website URLs before choosing which pages to extract.",
"Search the web, receive job notifications through webhooks and inspect API usage."
],
"planned": []
},
"auth": {
"supported": [
"api-key"
],
"oauth_status": "not-supported",
"note": "Keep API keys on the server or in your client’s credential store. Usage is charged to your Geonode plan."
},
"installation": {
"command": "npm install @geonode_scraper/scraper-sdk@0.6.2",
"status": "package-verified",
"note": "Uses the existing published package name. No package rename is required."
},
"links": {
"website": "https://geonode.com/integrations/sdk-typescript",
"docs": "https://docs.geonode.com/docs/scraper-api/guides/sdks/typescript",
"source": "https://github.com/geonodecom/sdk-typescript",
"source_visibility": "public",
"package": "https://www.npmjs.com/package/@geonode_scraper/scraper-sdk",
"changelog": "https://www.npmjs.com/package/@geonode_scraper/scraper-sdk",
"support": "https://geonode.com/contact"
},
"use_cases": [
{
"title": "Add website import to your app",
"description": "Accept a URL on your server, extract its content, and return the result to your application."
},
{
"title": "Refresh background data",
"description": "Submit a batch or crawl, retain the job ID, and process results after completion."
}
],
"prerequisites": [
"Node.js 18+",
"A Geonode API key and an active plan for authenticated requests."
],
"troubleshooting": [
{
"question": "My API key is not accepted.",
"answer": "Check the key in the Geonode dashboard and send it using X-Api-Key. Keep it out of browser bundles, URLs and version control."
},
{
"question": "The request is rate limited.",
"answer": "Respect the Retry-After response and your plan’s concurrency limits. Avoid automatically retrying a job submission when its outcome is unknown."
}
],
"related": [
"python",
"api",
"n8n"
],
"logo": "assets/typescript.svg",
"guide": {
"intro": "Build server-side JavaScript or TypeScript workflows with the Geonode Scraper API. The SDK uses Node's built-in fetch and provides typed API clients and request models.",
"sections": [
{
"title": "Extract your first page",
"paragraphs": [
"Set GEONODE_SCRAPER_API_KEY in your server environment. This ES module example uses top-level await: run it as an .mjs file, or use a TypeScript runtime configured for ES modules. Keep the key in server code."
],
"code": {
"label": "JAVASCRIPT / TYPESCRIPT · ES MODULE",
"value": "import {\n Configuration, ExtractionApi, OutputFormat,\n} from \"@geonode_scraper/scraper-sdk\";\n\nconst apiKey = process.env.GEONODE_SCRAPER_API_KEY;\nif (!apiKey) throw new Error(\"Set GEONODE_SCRAPER_API_KEY\");\n\nconst configuration = new Configuration({ apiKey });\nconst response = await new ExtractionApi(configuration).extractV1ExtractPost({\n extractRequest: {\n url: \"https://example.com\",\n formats: [OutputFormat.Markdown],\n },\n});\n\nif (\"data\" in response) {\n console.log(response.data.markdown);\n console.log(response.tokensCharged);\n}"
},
"expected": "On success, data.markdown contains the extracted page and tokensCharged reports the request cost. The data check narrows the response type; background requests return a job instead."
},
{
"title": "Move from one page to a workflow",
"steps": [
"BatchApi submits a list of URLs; CrawlApi follows links within your depth and page limits.",
"MapApi discovers a site's URLs, and SearchApi returns ranked search results.",
"For background work, save jobId and inspect the terminal job status. Bound polling by a deadline and handle failures or cancellation.",
"Use page and pageSize to retrieve all pages of batch or crawl results."
]
},
{
"title": "Keep API access on your server",
"paragraphs": [
"Use the full scoped package name in imports. The SDK can run in a browser, but embedding your Geonode API key there exposes it to visitors. Call it from a backend route, worker or other server process, then return only the data your frontend needs."
]
}
]
}
},
{
"schema_version": 1,
"id": "langchain",
"slug": "integration-langchain",
"name": "LangChain",
"category": "frameworks",
"summary": "Web research and content collection for LangChain agents.",
"seo_title": "Geonode for LangChain — Web Scraping Tools for AI Agents",
"description": "Give your LangChain agents web search and page content for research and retrieval workflows. Extract pages, crawl sites, discover URLs and run batches. Use the returned content in your own research and RAG pipelines, with tools to retrieve or wait for background jobs.",
"lifecycle": "published",
"platform_verification": "not-applicable",
"platform": "LangChain",
"version": "0.4.3",
"runtime": "Python 3.10+",
"last_verified": "2026-10-29",
"verification": {
"package": "verified",
"connection": "not-tested",
"note": "0.4.3 released on 2026-10-29 from geonodecom/integration-langchain by its Publish workflow with trusted publishing; registry metadata, provenance and a clean install were checked signed out. Package publication and local imports verified. Authenticated extraction has not been tested in this review. Capability descriptions reviewed against repository source on 2026-10-21; no new authenticated execution test.",
"evidence": [
"https://pypi.org/pypi/geonode-scraper-langchain/0.4.3/json",
"https://pypi.org/integrity/geonode-scraper-langchain/0.4.3/geonode_scraper_langchain-0.4.3-py3-none-any.whl/provenance",
"https://pypi.org/pypi/geonode-scraper-langchain/json"
]
},
"capabilities": {
"confirmed": [
"Connect native tools to your LangChain agents to search for and collect source content.",
"Extract page content as Markdown or HTML, with optional JavaScript rendering.",
"Run batch extraction and bounded website crawls as background jobs.",
"Discover website URLs before choosing which pages to extract.",
"Search the web and retrieve or wait for background job results."
],
"planned": []
},
"auth": {
"supported": [
"api-key"
],
"oauth_status": "not-supported",
"note": "Keep API keys on the server or in your client’s credential store. Usage is charged to your Geonode plan."
},
"installation": {
"command": "pip install geonode-scraper-langchain==0.4.3",
"status": "package-verified",
"note": "Uses the existing published package name. No package rename is required."
},
"links": {
"website": "https://geonode.com/integrations/integration-langchain",
"docs": "https://docs.geonode.com/docs/scraper-api/guides/sdks/langchain",
"source": "https://github.com/geonodecom/integration-langchain",
"source_visibility": "public",
"package": "https://pypi.org/project/geonode-scraper-langchain/",
"changelog": "https://pypi.org/project/geonode-scraper-langchain/",
"support": "https://geonode.com/contact"
},
"use_cases": [
{
"title": "Research with source material",
"description": "Let an agent search for relevant pages and extract their content before composing an answer with source URLs."
},
{
"title": "Prepare a retrieval corpus",
"description": "Map a site, select relevant URLs and extract Markdown for your own indexing pipeline."
}
],
"prerequisites": [
"Python 3.10+",
"A Geonode API key and an active plan for authenticated requests."
],
"troubleshooting": [
{
"question": "My API key is not accepted.",
"answer": "Check the key in the Geonode dashboard and send it using X-Api-Key. Keep it out of browser bundles, URLs and version control."
},
{
"question": "The request is rate limited.",
"answer": "Respect the Retry-After response and your plan’s concurrency limits. Avoid automatically retrying a job submission when its outcome is unknown."
}
],
"related": [
"crewai",
"agent-tools",
"mcp"
],
"logo": "assets/langchain.svg",
"guide": {
"intro": "Add Geonode web extraction to LangChain through native tools. Start with a direct tool call to check your API connection, then pass the same tools to your agent.",
"sections": [
{
"title": "Make your first tool call",
"paragraphs": [
"Set GEONODE_SCRAPER_API_KEY in your environment using the key from your Geonode dashboard. This example selects only extraction, URL mapping and search. It calls extraction directly, so no language model or model-provider key is needed for this first check."
],
"code": {
"label": "PYTHON · FIRST REQUEST",
"value": "import os\n\nfrom geonode_scraper_langchain import build_langchain_tools\nfrom geonode_scraper_tools_core import ScraperToolSettings\n\nsettings = ScraperToolSettings(\n host=\"https://scraper.geonode.io\",\n api_key=os.environ[\"GEONODE_SCRAPER_API_KEY\"],\n request_timeout=30.0,\n)\ntools = build_langchain_tools(\n settings=settings,\n operations=[\"extract\", \"map_urls\", \"search\"],\n)\nextract = next(t for t in tools if t.name == \"scraper_extract_content\")\noutcome = extract.invoke({\"url\": \"https://example.com\", \"formats\": [\"markdown\"]})\n\nif outcome[\"ok\"]:\n print(outcome[\"result\"][\"data\"][\"markdown\"])\nelse:\n print(outcome[\"error\"][\"status\"], outcome[\"error\"][\"message\"])"
},
"expected": "On a successful synchronous request, the script prints the extracted page as Markdown. A failed API request produces an error envelope instead. This is an example to run with your own key; it does not represent a recorded extraction result."
},
{
"title": "Connect the tools to your LangChain agent",
"paragraphs": [
"Pass tools=tools to LangChain's create_agent alongside your configured chat model. The integration installs langchain-core; an agent application also needs langchain and the package for its chosen model provider.",
"Give the agent a specific URL and outcome, such as: “Read https://example.com and explain what the page is for, using the extracted content.” Review the tool result before expanding the workflow."
]
},
{
"title": "Choose the operations your workflow needs",
"paragraphs": [
"The package exposes 21 documented operations. Selecting a smaller set reduces the number of tools your agent must choose between."
],
"steps": [
"Extract a single page as Markdown or HTML, synchronously or as a background job.",
"Submit batches and crawls, inspect progress, and wait for completion.",
"Map a site's URLs, search the web, and inspect usage and concurrency."
]
},
{
"title": "Handle failures and long-running jobs",
"paragraphs": [
"Check ok before reading result. On failure, error contains the HTTP status, code, message and retryable flag. A retryable failure may benefit from another attempt; an invalid key or request needs to be corrected first.",
"Set request_timeout for each HTTP response. Retries are disabled by default (max_retries=0). Wait tools poll every 3 seconds with a 60-second polling timeout by default; these settings are separate from the HTTP request timeout."
]
}
]
}
},
{
"schema_version": 1,
"id": "crewai",
"slug": "integration-crewai",
"name": "CrewAI",
"category": "frameworks",
"summary": "Search, crawl and extract web data for CrewAI agents.",
"seo_title": "Geonode for CrewAI — Web Scraping Tools for AI Agents",
"description": "Give your CrewAI researchers tools to find and collect source material from the web. Search the web, discover URLs, extract pages, crawl sites and run batches. Feed the returned content into your crew’s analysis and reporting tasks, with tools to retrieve or wait for background jobs.",
"lifecycle": "published",
"platform_verification": "not-applicable",
"platform": "CrewAI",
"version": "0.4.3",
"runtime": "Python 3.10–3.13",
"last_verified": "2026-10-29",
"verification": {
"package": "verified",
"connection": "not-tested",
"note": "0.4.3 released on 2026-10-29 from geonodecom/integration-crewai by its Publish workflow with trusted publishing; registry metadata, provenance and a clean install were checked signed out. Package publication and local imports verified. Authenticated extraction has not been tested in this review. Capability descriptions reviewed against repository source on 2026-10-21; no new authenticated execution test.",
"evidence": [
"https://pypi.org/pypi/geonode-scraper-crewai/0.4.3/json",
"https://pypi.org/integrity/geonode-scraper-crewai/0.4.3/geonode_scraper_crewai-0.4.3-py3-none-any.whl/provenance",
"https://pypi.org/pypi/geonode-scraper-crewai/json"
]
},
"capabilities": {
"confirmed": [
"Connect native tools to your CrewAI agents to collect source content for research tasks.",
"Extract page content as Markdown or HTML, with optional JavaScript rendering.",
"Run batch extraction and bounded website crawls as background jobs.",
"Discover website URLs before choosing which pages to extract.",
"Search the web and retrieve or wait for background job results."
],
"planned": []
},
"auth": {
"supported": [
"api-key"
],
"oauth_status": "not-supported",
"note": "Keep API keys on the server or in your client’s credential store. Usage is charged to your Geonode plan."
},
"installation": {
"command": "pip install geonode-scraper-crewai==0.4.3",
"status": "package-verified",
"note": "Uses the existing published package name. No package rename is required."
},
"links": {
"website": "https://geonode.com/integrations/integration-crewai",
"docs": "https://docs.geonode.com/docs/scraper-api/guides/sdks/crewai",
"source": "https://github.com/geonodecom/integration-crewai",
"source_visibility": "public",
"package": "https://pypi.org/project/geonode-scraper-crewai/",
"changelog": "https://pypi.org/project/geonode-scraper-crewai/",
"support": "https://geonode.com/contact"
},
"use_cases": [
{
"title": "Support a research crew",
"description": "Give a researcher tools to find and extract sources, then pass those results to a separate analysis task."
},
{
"title": "Refresh knowledge inputs",
"description": "Collect selected website pages as Markdown before your crew analyzes or summarizes them."
}
],
"prerequisites": [
"Python 3.10–3.13",
"A Geonode API key and an active plan for authenticated requests."
],
"troubleshooting": [
{
"question": "My API key is not accepted.",
"answer": "Check the key in the Geonode dashboard and send it using X-Api-Key. Keep it out of browser bundles, URLs and version control."
},
{
"question": "The request is rate limited.",
"answer": "Respect the Retry-After response and your plan’s concurrency limits. Avoid automatically retrying a job submission when its outcome is unknown."
}
],
"related": [
"langchain",
"agent-tools",
"python"
],
"logo": "assets/crewai.svg",
"guide": {
"intro": "Add Geonode web extraction to CrewAI through native tools. Start with a direct tool call to check your API connection, then pass the same tools to your agent.",
"sections": [
{
"title": "Make your first tool call",
"paragraphs": [
"Set GEONODE_SCRAPER_API_KEY in your environment using the key from your Geonode dashboard. This example selects only extraction, URL mapping and search. It calls extraction directly, so no language model or model-provider key is needed for this first check."
],
"code": {
"label": "PYTHON · FIRST REQUEST",
"value": "import os\n\nfrom geonode_scraper_crewai import build_crewai_tools\nfrom geonode_scraper_tools_core import ScraperToolSettings\n\nsettings = ScraperToolSettings(\n host=\"https://scraper.geonode.io\",\n api_key=os.environ[\"GEONODE_SCRAPER_API_KEY\"],\n request_timeout=30.0,\n)\ntools = build_crewai_tools(\n settings=settings,\n operations=[\"extract\", \"map_urls\", \"search\"],\n)\nextract = next(t for t in tools if t.name == \"scraper_extract_content\")\noutcome = extract.run(url=\"https://example.com\", formats=[\"markdown\"])\n\nif outcome[\"ok\"]:\n print(outcome[\"result\"][\"data\"][\"markdown\"])\nelse:\n print(outcome[\"error\"][\"status\"], outcome[\"error\"][\"message\"])"
},
"expected": "On a successful synchronous request, the script prints the extracted page as Markdown. A failed API request produces an error envelope instead. This is an example to run with your own key; it does not represent a recorded extraction result."
},
{
"title": "Connect the tools to your CrewAI agent",
"paragraphs": [
"Pass tools=tools to your CrewAI Agent, associate the agent with a Task, and run that task through a Crew. Configure a model supported by CrewAI and its provider credential separately from your Geonode API key. Some providers require an additional CrewAI extra.",
"Give the agent a specific URL and outcome, such as: “Read https://example.com and explain what the page is for, using the extracted content.” Review the tool result before expanding the workflow."
]
},
{
"title": "Choose the operations your workflow needs",
"paragraphs": [
"The package exposes 21 documented operations. Selecting a smaller set reduces the number of tools your agent must choose between."
],
"steps": [
"Extract a single page as Markdown or HTML, synchronously or as a background job.",
"Submit batches and crawls, inspect progress, and wait for completion.",
"Map a site's URLs, search the web, and inspect usage and concurrency."
]
},
{
"title": "Handle failures and long-running jobs",
"paragraphs": [
"Check ok before reading result. On failure, error contains the HTTP status, code, message and retryable flag. A retryable failure may benefit from another attempt; an invalid key or request needs to be corrected first.",
"Set request_timeout for each HTTP response. Retries are disabled by default (max_retries=0). Wait tools poll every 3 seconds with a 60-second polling timeout by default; these settings are separate from the HTTP request timeout."
]
}
]
}
},
{
"schema_version": 1,
"id": "n8n",
"slug": "integration-n8n",
"name": "n8n",
"category": "automation",
"summary": "Web search and content collection for self-hosted n8n.",
"seo_title": "Geonode for n8n — Web Scraping & Workflow Automation",
"description": "Bring web data into self-hosted n8n agents and workflows with Geonode’s community node. Extract pages, crawl sites, discover URLs, search the web and run batches. Use extraction and crawl completion triggers to continue your own AI processing, research or record-update steps.",
"lifecycle": "published",
"platform_verification": "not-verified",
"platform": "Self-hosted n8n",
"version": "0.3.2",
"runtime": "Self-hosted n8n 1.85+ · Node.js 20.15+",
"last_verified": "2026-11-08",
"verification": {
"package": "verified",
"connection": "passed",
"note": "0.3.2 released on 2026-11-08 from geonodecom/integration-n8n by its Publish workflow with trusted publishing; registry metadata and provenance were checked, and the author email is now the npm account's address, for the n8n Creator Portal. n8n's community package scan (@n8n/scan-community-package 0.42.0, which also lints the attested source) passes on the published version. The editor shows Geonode Scraper API; node and credential identifiers are unchanged. Needs n8n 1.85 or newer. Package verified on npm. Self-hosted community node; not n8n-verified or available on n8n Cloud. On 2026-11-01 the published 0.3.0 ran in self-hosted n8n 2.45.7 and 1.85.0, where Extract (sync, and async with waiting) and Statistics succeeded against the live API. Capability descriptions reviewed against repository source on 2026-10-21.",
"evidence": [
"https://registry.npmjs.org/n8n-nodes-scraperapi/0.3.2",
"https://registry.npmjs.org/-/npm/v1/attestations/n8n-nodes-scraperapi@0.3.2",
"https://registry.npmjs.org/n8n-nodes-scraperapi",