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.