I have already covered the subject of CSV Parsing in Power Automate in a previous blog post and two YouTube videos. That content has been really useful to many thousands of users already.
Despite the success and great feedback, I’ve always felt there is room for improvement to this common, yes critical task. So I have come up with something that is both faster, and incredibly easy to use.
Microsoft recently added the ability to use C# code in custom connectors. This functionality has enabled me to create a custom connector that makes working CSV files incredibly easy in both Power Automate and Power Apps.
The problem with existing solutions
- In depth knowledge of Power Automate actions and expressions are required.
- Lots of work required to build for CSV files with many columns.
- Do not really fit with the low-code/no-code philosophy.
A new custom C# connector for Parsing CSV Files
By creating a custom connector written in C# I have been able to build a solution that can deal with Parsing CSV Files in a single action. Key benefits:
- A single action will parse your entire CSV file and return JSON.
- Unlike 3rd Party connectors:
- The data will never leave your environment.
- You will not have to pay a subscription to use it on an ongoing basis.
- Works in both Power Automate and Power Apps.
- Easily handles Windows or Unix Style line endings.
- Can handle complex CSV files which contain commas within a field.
- Allows you to specify:
- Custom Delimiters.
- Custom column headers.
- Specify how many rows of data to skip in the incoming text file.
- Accepts base64 or text input
How does it work
The connector is incredibly easy to use, here is a screenshot:

It accepts five input parameters:
- CSV – Provide the CSV Content in Text or Base64 format.
- Method
- Simple – This option should be used for the majority of files, it provides the fastest performance.
- Regular Expression Based – This option can be used for CSV files that contain commas or quotes within the CSV content that are not being used to delimit the data.
- Delimiter – If left empty, this will default to a comma, but you can use any character or string that suits you.
- Skip Lines – Specify the number of rows to skip from the incoming CSV file before processing data.
- Column Headers –
- If left empty the first row of data will be used as the headers
- Specify you own headers, e.g. “Column1, Column2, Column3”.
The output will be a JSON array that represents your CSV Data. But you will also find three additional elements in the headers:
- rowcount – Will tell you the number of records returned.
- processingtimemillis – Tells you how many milliseconds it took to process the CSV.
- base64input – Tells you if the connector received base64 input or not.
The amount of time required to process the request is important as a custom connector has a limit of 5 seconds for execution.
I have tested with a CSV containing 30,000 rows and 7 columns of data and it took only 255 milliseconds to process, so you could easily handle a very large CSV file.
Licensing Requirements
In order to use a custom connector in either Power Automate or Power Apps you must have a premium license. There’s no getting around that, so if you don’t have either of those, I would encourage you to use one of my previous solutions.
Purchase Connector
Save yourself a tonne of time and simplify your workflows by purchasing this connector below.
How do I install the connector?
Once your purchase is complete, you will be emailed a solution which contains:
- The Custom Connector for use in your environment.
- A sample Power Automate Flow that shows how to use the connector.
- A sample Power App that shows how to use the connector.
- A link to an unlisted YouTube video guiding you how to install.
Simply import the solution and the connector will be available in your environment.
You will automatically receive any fixes or enhancements I create for one year after your purchase.
Phil Roth says
Hi Paul,
This is great news. Could you advise if the connector can handle UTF-16 LE encoded CSV files ?
Cheers
Phil
Paulie says
I’m not sure actually, can you send me a sample file and I will try it out? Please use the get in touch form and I will email you
Jan says
One caveat of this approach is that parsing script needs to execute within 5 seconds time window. If file is to big, or we want to do any thing more advanced with parsing, it may start being problematic. I guess Azure Functions is the best approach then to consider other than 3rd party…
Paulie says
That’s why I added the timer function. So you can gauge if you will get close to the 5 second limit. According to my test it would have to be a huge CSV file to get close to the 5 second limit.
Fraser says
Another great blog and video Paulie.
Do you think it is possible to use the same approach to build a connector to transform XML using XSLT templates?
Any chance you can maybe put something like that together at some point?
Paulie says
I think it would be possible. I’m actually at work on my next connector which fills in a lot of the gaps in Power Automate.
Will look into this.
Paulie says
Hi Fraser,
What you want to do is possible and I am going to add that functionality to my Power Tools connector. I’ve already written the code and tested it, it works well. Actually really useful for formatting tables etc.
Paulie says
Hi Fraser,
Power Tools can now transform XML using XSLT! It is a very powerful action, thank you for suggesting it!
Paul
Fraser Goodburn says
Super stuff Paulie. I’ll checkout your updated Power Tools connector and give it a spin.
Without having looked first, can the supplied XSLT stylesheet provide XML transformed to another XML structure, instead of an HTML format output?
Paulie says
I’m about to do a video on it so if you wait for that – you’ll see what it’s about
Fraser Goodburn says
Great. I’ll look out for that vid landing.
Phil says
Same here, look forward to the video and updated functionality. Your continued efforts to make simplify conversion processes save a lot of valuable time.
Paulie says
Video is done: Transform XML with XSLT with Power Automate
Fraser Goodburn says
Another banging video Paulie, that really emphasises the potential for the use of the XML / XSLT action, in your Power Tools connector.
As you state, XML and XSLT transforms are a large topic in themselves. But you can convert XML to just about any format of output, with the right stylesheet. ?
Your very sneaky use of ChatGPT to generate a stylesheet to get you going, is the perfect way to get users working with this.
In summary… it’s a beautiful thing. Keep those tools and videos coming Sir…
David Breneman says
Hello. Any chance this will work with Logic Apps?
Paulie says
I actually don’t know as I haven’t tried it. But I will check and come back to you!
David Breneman says
Great. Thank you. Hoping it does!
Dale says
Love your work Paulie. Just bought you connector. Is there any chance that this connector could be paired with a SharePoint-List-Sync connector that could keep lists in sync with CSVs?
I know you have great examples of batch create and delete workflows but it looks like you’re soooo close to a custom connector that can wrap this up in a single action. I’m sure it would be popular.
Paulie says
Hi David,
I checked out logic apps and the code is basically the same, but I don’t yet know enough about Logic Apps to know if there is an easy way to import/export the connectors in the same way that I have done for Power Platform. I will look into it more. But the short answer to your question is that it could work, if I was more knowledgable.
Paulie says
I am currently working on actions that simplify the batch delete/update/create process. I do like your idea though. But for it to work you’d at least have to query the SharePoint list first, and supply the action with the output from SharePoint and CSV content, it could then generate you the batch code you’d need to send to SharePoint to insert/update or delete records. It’s certainly not simple, but it would be possible. Hopefully the connector is making your life easier anyway, thank you for buying it!
David Breneman says
This is great news. Let me know if I can assist in any way.
Adam says
Hi Paulie, great solution, this will come in handy for several of my processes. I’m trying to use the connector in a canvas app and have imported your sample .msapp file, however I’m getting an error on the method, where PowerApps is expecting a record value rather than text. Am I missing something?
Paulie says
Let me check it out quickly, I changed this recently so might need to fix something up.
Paulie says
Hi Adam – that is now fixed, can you download the connector again please?