Friday, March 2, 2012

Eagle: Managing parts with BOM-EX

I want to share a time-saving tip with you: the Eagle ULP script suite, bom-ex.

Here's Why

If you've designed and populated your own boards, you know that it's easy to spend lots of time finding the right parts.

A typical, simple board, like the LPC2101 breakout board I'm working on, has about a dozen unique parts. Big deal, you say.

It takes me about 5 minutes to find a suitable part using parametric search on DigiKey, Mouser, Newark, etc. A dozen parts means an hour of parts searching.

Wouldn't we all like to spend some of that time fixing your code or something? Besides, what about the next board you make? And the next? And the next? Having to search over and over for things is, well... sub-optimal.

There is an easier, faster way, my friends.

What's It Do?

Bom-ex is a set of ULP scripts that help you easily and quickly manage a database of common parts, and manage a BOM for each project. Depending on how you use it, it can save you quite a bit of time. They build on the Eagle bom.ulp script, adding a lot of useful features.

I'm going to show you how I use it to cut the parts search time down to 5-15 minutes per board.

Where Do I Get It?

Get from the Eagle ULP Downloads section. Here's the list sorted by name. Look for


Install bom-ex by extracting the zip archive into the ulp directory of your Eagle installation. Mine's in a sub-folder called bom-ex.

Create a file named partsdb.txt somewhere (well, you can name it hookypooky.txt for all I care). I've found that creating a single, global parts database is best because you can quickly and easily reuse components between projects.

Another thought is that you could create a parts database per supplier, e.g., newarkdb.txt, digikeydb.txt, mouserdb.txt. I plan to take this approach soon.

For each new project, add a global attribute DATABASE that points to the file. Under the File menu, at the bottom... Global attributes...

A dialog box appears. Click New in the dialog box which brings up another dialog. Enter DATABASE and the (relative) pathname to the database file.

That's it. You're ready to start saving time.

How I Use It

For Parts In The Database

When I'm done with my schematic design, and at least taken a rough cut at the PCB layout, I go in and select parts for those parts I already have in the database. Here's how.

Click the ULP run button in the Schematic view.

Choose bom-partno-mgr.ulp

You should see a list of the parts on your board. The picture below shows what it looks like once you've selected all your parts. Double-click the one you want to choose a part for.

You'll then see a list of parts to choose from your database. Double-click the one you want and click OK

 Back in the parts dialog, click apply all and click Ok.

That's a five or ten minute deal for the entire board if you have the parts in your database.

What if you run into a part that's not in the database yet?

For New Parts
First, find the part at DigiKey, Newark or Mouser with parametric search (or use
Now, edit your parts database file. You can do that from the Eagle control panel or with your favorite editor.

Enter in the data using the tab-separated fields in the database. The fields in order from left to right are:
  • Mfg Part Num, e.g., CRCW06031K00FKEA for a Vishay-Dale 0603 1K resistor
  • Mfg Name, e.g., Vishay-Dale
  • VID is the vendor ID, like DK for DigiKey, NW for Newark, ME for Mouser
  • Vendor Part Num, e.g., 52K8015 for the Newark part number
  • Description, like "RESISTOR 0603 THICK FILM 1KOHM 100mW 1%"
They must be tab-separated. There are additional fields representing quantities, etc. I ignore them. Why? They're not needed and you can't manage part quantities with a global database. When you upload the BOM, you'll get the quantity you need.

Once you have the data entered, go back to the steps listed under "For Parts In The Database".

When You're Done With Your Board
Run the bom-ex.ulp script with the run ulp button

You'll see a dialog box for the BOM export. Click Export

Now, choose the format, e.g., DigiKey, from the dialog that appears and click OK

Select CSV or Tab delimited. I use CSV for DigiKey.

Now go to your parts supplier website and use their tools to upload your BOM, create an order, and buy the stuff. I use My Digi-Key for this; you have to register. Other suppliers have similar capabilities.

Another Option

Late breaking news! Stop the presses! Version 6 of Eagle includes DesignLink, a feature that does essentially the same things as BOM-EX and also helps you search for parts with pictures, descriptions, etc. It's extremely fast and convenient but has a few flaws.

Select Schematic from the DesignLink menu and it steps through every part on your schematic displaying a search window to find the appropriate part at Newark. You can export your BOM, and you can also click a link to pop everything into the Newark shopping cart.

It has downsides.  It only searches through Newark's parts listing. Don't get me wrong. I love Newark. Their parts (particularly passives) are often cheaper than Digi-Key but their shipping tends to be more expensive than Digi-Key offsetting any savings when prototyping simple boards. A few dollars matters for those of us on a shoestring budget. Less an issue for hobbyists with a little extra disposable income.

Also, you can't filter out the dreaded Farnell UK direct ship items which tack on $20 handling fee per order.

It doesn't find all the parts automatically. Standard 0.1" pin headers were particularly tricky to dig up. I had to go onto Newark's site to find them, in fact.

And it doesn't save favorite parts; you have to search for everything everytime you design a new board.

Finally, the price sorting is buggy, at least in Eagle 6.0.0. It's livable though.

I fully expect that future versions, perhaps even the latest 6.1.0, will continue to improve the tool. It's a tremendous time saver even over BOM-EX. I was able to go from finished design to populated shopping cart in about 5-10 minutes. Wow.

That's great for one-off prototypes, but one thing you can't do is build a favorite list of the cheapest parts. As far as I can tell, you have to start from scratch each time. For this, BOM-EX has an advantage.

Parting Thoughts

After using BOM-EX for awhile, if you standardize on various parts and packages, you build up a stock of standard parts: your favorite bypass caps, LEDs, LED resistors, common resistor values, switches, regulators, microcontrollers, and so on.

As you build up a standard database, you can start to design the schematic using those standard packages, too, so that your board footprints are right from the get go. I also tend to build custom components into my own parts libraries.

For example, I've standardized on 0603 caps and resistors and a handful of common components in the database. I have a favorite green indicator LED in 1206 size, and I have a set of favorite voltage regulators to pick from.

For new boards, half or more of the components are already in my database, while the rest are unique to the design so I'd have to search for them either way. Bottom line, I'm not wasting time finding parts anymore.


  1. Thanks for the help! One thing that wasn't totally apparent to me was that the order of operation is:
    1) find parts you want (Digikey, etc)
    2) save the pertinent information in the database text file (careful on columns, tabs, etc)
    3) in Eagle, run the BOM-EX.ulp
    4) in the BOM-EX form, double-click on each schematic part to assign information from the database text file to it
    5) *** in the BOM-EX form, click on "Apply All" to implement the assignments! ***


  2. Hi, I came here looking to refresh what new options there might be. After reading this, I thought I should share my system.
    I use my own part numbers on the schematic (there's a whole system, but CAP0603-33K-1 isn't too hard to understand.
    Then I export this BOM with QTY , mypartnum, reference designators.
    I use PARTS and VENDORS from Trilogy design as my database and import this as a part list names ASY-MYBOARDxxx
    All the parts in EAGLE are already matched with the PV database (as I have built them up over the years. The improvement here is that I can have multiple suppliers of parts, track price breaks etc...

  3. bom-partno-mgr.ulp is missing in all the version of bom-ex on the eagle cad link provided. any ideas? i found a very old copy on github but i'm sure there are newer version.

    1. Too late for you, but for others: For new versions of eagle you don't need the bom-partno-mgr.ulp.
      Just open the "bom-ex.ulp".
      You also don't need to assign the global "DATABASE" attribute for your project.
      Just select "Database" in the bom-ex window and select your database.

    2. Oh super! Really glad to hear that! Thanks for the update.


Note: Only a member of this blog may post a comment.