The browser automation platform for developers and product teams
The browser automation platform for developers and product teams
Develop, deploy, consume, and monitor reliable web scrapers and browser automations. Reliability powered by AI
Develop
Deploy
Consume
Monitor
USE CASES
Build automations across every industry
USE CASES
Build automations across every industry
Government services
Extract data and complete actions on government websites at scale
Government services
Extract data and complete actions on government websites at scale
Government services
Extract data and complete actions on government websites at scale
Government services
Extract data and complete actions on government websites at scale
Sales automation
Automate actions on behalf of your users on their social media accounts
Sales automation
Automate actions on behalf of your users on their social media accounts
Sales automation
Automate actions on behalf of your users on their social media accounts
Sales automation
Automate actions on behalf of your users on their social media accounts
Insurance
Collect data to anticipate market trends and optimize investments and conduct pricing comparisons
Insurance
Collect data to anticipate market trends and optimize investments and conduct pricing comparisons
Insurance
Collect data to anticipate market trends and optimize investments and conduct pricing comparisons
Insurance
Collect data to anticipate market trends and optimize investments and conduct pricing comparisons
OUR ADVANTAGE
Put your data extraction on autopilot with Intuned
OUR ADVANTAGE
Put your data extraction on autopilot with Intuned
Before Intuned, writing a scraper requires building selectors manually and then updating them whenever the target website changes.
Before Intuned, writing a scraper requires building selectors manually and then updating them whenever the target website changes.
Before Intuned
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
function transformString(input) {
return input.replace(/ - Amendment #\d+/, '');
}
function transformEffectiveDate(input) {
return input.replace('Effective Date: ', '');
}
function transformSupplierNumber(input) {
return input.replace('Supplier Number: ', '');
}
const browser = await chromium.launch({headless: false});
// Create pages, interact with UI elements, assert values
const page = await browser.newPage();
await page.goto("https://demo-site-eta.vercel.app/lists/card");
await page.waitForTimeout(10000);
const listContainerLocator = page.locator(
"#radix-\:r3\:-content-card > div");
const listItems = await listContainerLocator.locator("div").all();
const contractsList = [];
for (let i = 0; i < listItems.length; i++) {
const itemLocator = listItems[i];
const title = await itemLocator.locator("h2").textContent();
const suppliers = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > p:nth-child(1)"
).textContent();
const effectiveDate = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > p:nth-child(2)"
).textContent();
const supplierNumber = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > p:nth-child(3)"
).textContent();
const status = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > div"
).textContent();
const link = await itemLocator.locator("a").getAttribute("href");
contractsList.push({
title: transformString(title),
suppliers,
effectiveDate: transformEffectiveDate(effectiveDate),
supplierNumber: transformSupplierNumber(supplierNumber),
status,
link
});
}
return contractsList;
Expand all 58 lines
Before Intuned
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
function transformString(input) {
return input.replace(/ - Amendment #\d+/, '');
}
function transformEffectiveDate(input) {
return input.replace('Effective Date: ', '');
}
function transformSupplierNumber(input) {
return input.replace('Supplier Number: ', '');
}
const browser = await chromium.launch({headless: false});
// Create pages, interact with UI elements, assert values
const page = await browser.newPage();
await page.goto("https://demo-site-eta.vercel.app/lists/card");
await page.waitForTimeout(10000);
const listContainerLocator = page.locator(
"#radix-\:r3\:-content-card > div");
const listItems = await listContainerLocator.locator("div").all();
const contractsList = [];
for (let i = 0; i < listItems.length; i++) {
const itemLocator = listItems[i];
const title = await itemLocator.locator("h2").textContent();
const suppliers = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > p:nth-child(1)"
).textContent();
const effectiveDate = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > p:nth-child(2)"
).textContent();
const supplierNumber = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > p:nth-child(3)"
).textContent();
const status = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > div"
).textContent();
const link = await itemLocator.locator("a").getAttribute("href");
contractsList.push({
title: transformString(title),
suppliers,
effectiveDate: transformEffectiveDate(effectiveDate),
supplierNumber: transformSupplierNumber(supplierNumber),
status,
link
});
}
return contractsList;
Expand all 58 lines
Before Intuned
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
function transformString(input) {
return input.replace(/ - Amendment #\d+/, '');
}
function transformEffectiveDate(input) {
return input.replace('Effective Date: ', '');
}
function transformSupplierNumber(input) {
return input.replace('Supplier Number: ', '');
}
const browser = await chromium.launch({headless: false});
// Create pages, interact with UI elements, assert values
const page = await browser.newPage();
await page.goto("https://demo-site-eta.vercel.app/lists/card");
await page.waitForTimeout(10000);
const listContainerLocator = page.locator(
"#radix-\:r3\:-content-card > div");
const listItems = await listContainerLocator.locator("div").all();
const contractsList = [];
for (let i = 0; i < listItems.length; i++) {
const itemLocator = listItems[i];
const title = await itemLocator.locator("h2").textContent();
const suppliers = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > p:nth-child(1)"
).textContent();
const effectiveDate = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > p:nth-child(2)"
).textContent();
const supplierNumber = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > p:nth-child(3)"
).textContent();
const status = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > div"
).textContent();
const link = await itemLocator.locator("a").getAttribute("href");
contractsList.push({
title: transformString(title),
suppliers,
effectiveDate: transformEffectiveDate(effectiveDate),
supplierNumber: transformSupplierNumber(supplierNumber),
status,
link
});
}
return contractsList;
Expand all 58 lines
Before Intuned
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
function transformString(input) {
return input.replace(/ - Amendment #\d+/, '');
}
function transformEffectiveDate(input) {
return input.replace('Effective Date: ', '');
}
function transformSupplierNumber(input) {
return input.replace('Supplier Number: ', '');
}
const browser = await chromium.launch({headless: false});
// Create pages, interact with UI elements, assert values
const page = await browser.newPage();
await page.goto("https://demo-site-eta.vercel.app/lists/card");
await page.waitForTimeout(10000);
const listContainerLocator = page.locator(
"#radix-\:r3\:-content-card > div");
const listItems = await listContainerLocator.locator("div").all();
const contractsList = [];
for (let i = 0; i < listItems.length; i++) {
const itemLocator = listItems[i];
const title = await itemLocator.locator("h2").textContent();
const suppliers = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > p:nth-child(1)"
).textContent();
const effectiveDate = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > p:nth-child(2)"
).textContent();
const supplierNumber = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > p:nth-child(3)"
).textContent();
const status = await itemLocator.locator(
"div:nth-child(1) > div:nth-child(2) > div"
).textContent();
const link = await itemLocator.locator("a").getAttribute("href");
contractsList.push({
title: transformString(title),
suppliers,
effectiveDate: transformEffectiveDate(effectiveDate),
supplierNumber: transformSupplierNumber(supplierNumber),
status,
link
});
}
return contractsList;
Expand all 58 lines
With Intuned optimized extractors, just describe the data you need. Creating selectors, updating them is automated by us.
With Intuned Optimized Extractors, just describe the data you need. Creating selectors, updating them is automated by us.
That’s it!
With Intuned
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
await page.goto("https://demo-site-eta.vercel.app/lists/card");
const contractsList = await page.extractArrayOptimized({
itemEntityName: "contract_info",
label: "contract_info",
itemEntitySchema: {
type: "object",
properties: {
title: {
type: "string", primary: true,
description:
"contract title, title should not include Amendment number",
},
supplier: {
type: "string",
description: "supplier of the contract",
},
state: {
type: "string",
description: "state of the contract",
},
effectiveDate: {
type: "string",
description: "effective date",
},
},
required: ["title", "supplier", "state"],
},
});
return contractsList;
That's all
With Intuned
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
await page.goto("https://demo-site-eta.vercel.app/lists/card");
const contractsList = await page.extractArrayOptimized({
itemEntityName: "contract_info",
label: "contract_info",
itemEntitySchema: {
type: "object",
properties: {
title: {
type: "string", primary: true,
description:
"contract title, title should not include Amendment number",
},
supplier: {
type: "string",
description: "supplier of the contract",
},
state: {
type: "string",
description: "state of the contract",
},
effectiveDate: {
type: "string",
description: "effective date",
},
},
required: ["title", "supplier", "state"],
},
});
return contractsList;
That's all
With Intuned
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
await page.goto("https://demo-site-eta.vercel.app/lists/card");
const contractsList = await page.extractArrayOptimized({
itemEntityName: "contract_info",
label: "contract_info",
itemEntitySchema: {
type: "object",
properties: {
title: {
type: "string", primary: true,
description:
"contract title, title should not include Amendment number",
},
supplier: {
type: "string",
description: "supplier of the contract",
},
state: {
type: "string",
description: "state of the contract",
},
effectiveDate: {
type: "string",
description: "effective date",
},
},
required: ["title", "supplier", "state"],
},
});
return contractsList;
That's all
With Intuned
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
await page.goto("https://demo-site-eta.vercel.app/lists/card");
const contractsList = await page.extractArrayOptimized({
itemEntityName: "contract_info",
label: "contract_info",
itemEntitySchema: {
type: "object",
properties: {
title: {
type: "string", primary: true,
description:
"contract title, title should not include Amendment number",
},
supplier: {
type: "string",
description: "supplier of the contract",
},
state: {
type: "string",
description: "state of the contract",
},
effectiveDate: {
type: "string",
description: "effective date",
},
},
required: ["title", "supplier", "state"],
},
});
return contractsList;
That's all
Why intuned
The only browser automation infra you need
01
Develop with ease
Intuned IDE comes with built-in support for user auth and AI functions to extract data and dismiss pop-ups
01
Develop with ease
Intuned IDE comes with built-in support for user auth and AI functions to extract data and dismiss pop-ups
01
Develop with ease
Intuned IDE comes with built-in support for user auth and AI functions to extract data and dismiss pop-ups
01
Develop with ease
Intuned IDE comes with built-in support for user auth and AI functions to extract data and dismiss pop-ups
02
Deploy anywhere & scale on demand
Configure integrations to execute in a region of your choice and trust Intuned to scale as you need
02
Deploy anywhere & scale on demand
Configure integrations to execute in a region of your choice and trust Intuned to scale as you need
02
Deploy anywhere & scale on demand
Configure integrations to execute in a region of your choice and trust Intuned to scale as you need
02
Deploy anywhere & scale on demand
Configure integrations to execute in a region of your choice and trust Intuned to scale as you need
03
Consume with a simple API
Orchestrate your automations with easy to use APIs.
03
Consume with a simple API
Orchestrate your automations with easy to use APIs.
03
Consume with a simple API
Orchestrate your automations with easy to use APIs.
03
Consume with a simple API
Orchestrate your automations with easy to use APIs.
04
Monitor without losing sleep
Get proactive alerts on changes to target sites with access to recordings and traces from previous runs
04
Monitor without losing sleep
Get proactive alerts on changes to target sites with access to recordings and traces from previous runs
04
Monitor without losing sleep
Get proactive alerts on changes to target sites with access to recordings and traces from previous runs
04
Monitor without losing sleep
Get proactive alerts on changes to target sites with access to recordings and traces from previous runs
Get started
Level up your web scraping and browser automation.
Get started
Level up your web scraping and browser automation.